ACCEPT 2

中文man手册

目录

ACCEPT

NAME åç§°
SYNOPSIS æ¦è¿°
DESCRIPTION æè¿°
NOTES 注æ
RETURN VALUE è¿åå¼
ERROR HANDLING é误å¤ç
ERRORS é误
CONFORMING TO å¼å®¹äº
NOTE 注æ
SEE ALSO åè§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·

NAME åç§°

accept - å¨ä¸ä¸ªå¥æ¥å䏿¥æ¶ä¸ä¸ªè¿æ¥

SYNOPSIS æ¦è¿°

#include <sys/types.h>
#include <sys/socket.h>

int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

DESCRIPTION æè¿°

accept 彿°ç¨äºåºäºè¿æ¥ç奿¥å (SOCK_STREAM, SOCK_SEQPACKET å SOCK_RDM). å®ä»æªå®æè¿æ¥éåä¸ååºç¬¬ä¸ä¸ªè¿æ¥è¯·æ±,å建ä¸ä¸ªååæ° s 屿§ç¸åçè¿æ¥å¥æ¥å,并为è¿ä¸ªå¥æ¥ååéä¸ä¸ªæä»¶æè¿°ç¬¦, ç¶å以è¿ä¸ªæè¿°ç¬¦è¿å.æ°å建çæè¿°ç¬¦ä¸åå¤äºå¾å¬ç¶æ.å 奿¥å s ä¸åæ- ¤è°ç¨çå½±å.注æä»»æä¸ä¸ªæä»¶æè¿°ç¬¦æ å¿ (ä»»ä½å¯ä»¥è¢« fcntl以忰 F_SETFL 设置çå¼,æ¯å¦éé»å¡å¼æè弿¥ç¶æ)ä¸ä¼è¢« accept. æç»§æ¿.

åæ° s æ¯ä»¥ socket(2) å建,ç¨ bind(2) ç»å®å°ä¸ä¸ªæ¬å°å°å,å¹¶ä¸å¨è°ç¨äº listen(2). ä¹åæ£å¨ä¾¦å¬ä¸ä¸ªè¿æ¥ç奿¥å. åæ° addr æ¯ä¸ä¸ªæåç»æsockaddrçæé.è¿ä¸ªç»æä½ä»¥è¿æ¥å®ä½å°åå¡«å. æè°çè¿æ¥å®ä½,å°±æ¯ä¼æå¨ç¥çç½ç»å±.åæ° addr æä¼ éççæ- £çå°åæ ¼å¼ä¾èµäºæä½¿ç¨ç奿¥åæ. (åè§ socket(2) åååè®®èªå·±çæå页). addrlen æ¯ä¸ä¸ªå®æ¶åæ°: å®ç大å°åºè¯¥è½å¤è¶³ä»¥å®¹çº³åæ° addr ææåçç»æä½;å¨å½æ°è¿åæ¶æ¤åæ°å°ä»¥åèæ°è¡¨ç¤ºåºè¿åå°åç å®éé¿åº¦.è¥ addr 使ç¨NULLä½ä¸ºåæ°,addrlenå°ä¹è¢«ç½®ä¸ºNULL.

妿éå䏿²¡ææªå®æè¿æ¥å¥æ¥å,å¹¶ä¸å¥æ¥åæ²¡ææ è®°ä¸ºéé»å¡å¼, accept å°é»å¡ç´å°ä¸ä¸ªè¿æ¥å°è¾¾.妿ä¸ä¸ªå¥æ¥å被æ è®°ä¸ºéé»å¡å¼èéå ä¸- æ²¡ææªå®æè¿æ¥å¥æ¥å, accept å°è¿åEAGAIN.

ä½¿ç¨ select(2) æè poll(2). å¯ä»¥å¨ä¸ä¸ªå¥æ¥å- ä¸æè¿æ¥å°æ¥æ¶äº§çäºä»¶.å½å°è¯ä¸ä¸ªæ°çè¿æ¥æ¶ 奿¥å- 读就绪,è¿æ ·æä»¬å°±å¯ä»¥è°ç¨ accept 为è¿ä¸ªè¿æ¥è·å¾ä¸ä¸ªæ°ç奿¥å.æ- ¤å¤,ä½ è¿å¯ä»¥è®¾ç½®å¥æ¥åå¨å¤éæ¶ æ¥æ¶å°ä¿¡å· SIGIO; ç»è请åè§ socket(7)

对äºé£äºéè¦æ¾å¼ç¡®è®¤çåè®®,æ¯å¦ DECNet, accept å¯ä»¥çä½ä»ä»ä»éåä¸- ååºä¸ä¸ä¸ªè¿æ¥èä¸å确认.å½å¨è¿ä¸ªæ°çæä»¶ æè¿°ç¬¦ä¸è¿è¡æ®é读åæä½æ¶æç¤ºäºç¡®è®¤,å½å³éè¿ä¸ªæ°ç奿¥åæ¶æ ç¤ºäºæç».ç®åå¨Linuxä¸åªæDECNetæè¿æ · çå«ä¹.

NOTES 注æ

彿¥æ¶å°ä¸ä¸ª SIGIO ä¿¡å·æè select(2) æ poll(2) è¿åè¯»å°±ç»ªå¹¶ä¸æ»æ¯æå³çææ°è¿æ¥å¨çå¾,å ä¸ºè¿æ¥å¯è½å¨è°ç¨ accept ä¹åå·²ç»è¢«å¼æ¥ç½ç»é误æèå¶ä»çº¿ç¨æç§»é¤.妿åçè¿ç§æåµ, é£ä¹è°ç¨å°é»å¡å¹¶çå¾ä¸ä¸ä¸ªè¿æ¥çå°æ¥.ä¸ºç¡®ä¿ accept æ°¸è¿ä¸ä¼é»å¡,ä¼ éç奿¥å s éè¦ç½® O_NONBLOCK æ å¿(åè§ socket(7)).

RETURN VALUE è¿åå¼

æ¤è°ç¨å¨åçé误æ¶è¿å-1.è¥æååè¿åä¸ä¸ªéè´æ´æ°æ è¯è¿ä¸ª è¿æ¥å¥æ¥å.

ERROR HANDLING é误å¤ç

Linux accept å°ä¸ä¸ªå¾å¤çç½ç»é误代ç éè¿ accept ä¼ éç»æ°å¥æ¥å . è¿ç§å¤çæ¹å¼æå«äºå¶ä»çBSD奿¥åå®ç°.为å¯é æä½,åºç¨ç¨åº å¿é¡»å¨è°ç¨ accept ä¹åè½å¤æ£æµè¿äºä¸ºåè®®å®ä¹çç½ç»é误,å¹¶ä¸ä»¥éè¯è§£å³,就象 EAGAIN 䏿 ·.对äºTCP/IPè¿äºç½ç»éè¯¯æ¯ ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP, 以å ENETUNREACH.

ERRORS é误

EAGAINæèEWOULDBLOCK

奿¥å被æ è®°ä¸ºéé»å¡,ä¸å½å没æå¯æ¥æ¶çè¿æ¥.

EBADF

æè¿°ç¬¦éæ³.

ENOTSOCK

æè¿°ç¬¦æåä¸ä¸ªæä»¶,è䏿¯ä¸ä¸ªå¥æ¥å.

EOPNOTSUPP

ä½ä¸ºåæ°ç奿¥å䏿¯ SOCK_STREAM. ç±»å

EFAULT

åæ° addr ä¸å¨ç¨æ·å¯åå°å空é´ä¹å.

EPERM

é²ç«å¢è§åç¦æ¢è¿æ¥.

ENOBUFS,ENOMEM

没æè¶³å¤åå. è¿ä¸ªé误ä¸è¬æ¥è¯´æå³çåååéå奿¥åç¼å²åºæé, è䏿¯æ²¡æç³»ç»åå.

å¦å¤,æ°å¥æ¥åååè®®ä¸å®ä¹çç½ç»é误ä¹å¯è½è¢«è¿å. ä¸åçLinuxåæ ¸ä¹å¯è½è¿åä¸åé误 EMFILE, EINVAL, ENOSR, ENOBUFS, EPERM, ECONNABORTED, ESOCKTNOSUPPORT, EPROTONOSUPPORT, ETIMEDOUT, ERESTARTSYS.

CONFORMING TO å¼å®¹äº

SVr4,4.4BSD( accept 彿°é¦æ¬¡åºç°äºBSD 4.2). BSDæåé¡µææ¡£å®ä¹äºäºä¸ªå¯è½çé误è¿åå¼ (EBADF, ENOTSOCK, EOPNOTSUPP, EWOULDBLOCK, EFAULT). SUSv2ææ¡£çå®ä¹æ¯EAGAIN, EBADF, ECONNABORTED, EFAULT, EINTR, EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, ENOSR, ENOTSOCK, EOPNOTSUPP, EPROTO, EWOULDBLOCK.

Linux acceptä¸ç»§æ¿è±¡ O_NONBLOCK è¿æ ·ç奿¥åæ å¿. è¿ä¸ç¹æå«äºå¶ä»çBSD奿¥åå®ç°. å æ¤,ç¨åºåºè¯¥å¨acceptæè¿åç奿¥å- ä¸è®¾ç½®ææéè¦çæ å¿.

NOTE 注æ

彿° accept ç第ä¸ä¸ªåæ°åæ¥è¢«å£°æä¸º’int *’(å¨libc4ålibc5以åå¶ä»å¾å¤ç³»ç»ä¸, æ¯å¦BSD 4.*,SunOS 4, SGI);POSIX 1003.1gèæ¡è¯å¾å°å¶æ¹å为 ‘size_t *’,SunOS 5å°±æ¯è¿ä¹åç. 忥çPOSIXèæ¡åSingle Unix Specification以åglibc2使ç¨äº ‘socklen_t *’. Quoting Linus Torvalds: å¼èªLinus Torvalds (è¯æ³¨:è¿ä¸ªå®¶ä¼å°±æ¯Linuxçåå§äºº,æä»¥æä¿çäºä»è人家çåæ, ä»å°åæå¤§æéå): I fails: only italicizes a single line _Any_ sane library _must_ have "socklen_t" be the same size as int. Anything else breaks any BSD socket layer stuff. POSIX initially _did_ make it a size_t, and I (and hopefully others, but obviously not too many) complained to them very loudly indeed. Making it a size_t is completely broken, exactly because size_t very seldom is the same size as "int" on 64-bit architectures, for example. And it _has_ to be the same size as "int" because that’s what the BSD socket interface is. Anyway, the POSIX people eventually got a clue, and created "socklen_t". They shouldn’t have touched it in the first place, but once they did they felt it had to have a named type for some unfathomable reason (probably somebody didn’t like losing face over having done the original stupid thing, so they silently just renamed their blunder).

æ°æ®ç±»å"socklen_t"åintåºè¯¥å·æç¸åçé¿åº¦.å¦åå°±ä¼ç ´å BSD奿¥å- å±çå¡«å.POSIXå¼å§çæ¶åç¨çæ¯size_t, Linus Torvalds(ä»å¸æææ´å¤ç人,使¾ç¶ä¸æ¯å¾å¤) åªååä»ä»¬è§£é使ç¨size_tæ¯å®å¨é误ç,å ä¸ºå¨64ä½ç»æä¸ size_tåintçé¿åº¦æ¯ä¸ä¸æ ·ç,èè¿ä¸ªåæ°(ä¹å°±æ¯accept彿° ç第ä¸åæ°)çé¿åº¦å¿é¡»åintä¸è´,å ä¸ºè¿æ¯BSD奿¥åæ¥å£ æ å.æç»POSIXçé£å¸®å®¶ä¼æ¾å°äºè§£å³çåæ³,é£å°±æ¯åé äº ä¸ä¸ªæ°çç±»å"socklen_t".Linux Torvaldsè¯´è¿æ¯ç±äºä»ä»¬ åç°äºèªå·±çé误ä½åä¸å¥½ææå大家ä¼å¿æ¿è®¤,æä»¥å¦å¤ åé äºä¸ä¸ªæ°çæ°æ®ç±»å.

SEE ALSO åè§

bind(2), connect(2), listen(2), select(2), socket(2)

[䏿çç»´æ¤äºº]

byeyear <love_my_love@263.net >

[ä¸æçææ°æ´æ°]

2002.01.27

ãä¸å½linux论åmanæå页翻è¯è®¡åã:

http://cmpp.linuxforum.net

è·

æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
䏿 man æå页计åï¼https://github.com/man-pages-zh/manpages-zh