ACCEPT

Section: ¸®´ª½º ÇÁ·Î±×·¡¸Ó ¸Å´º¾ó (2)
Updated: 1999³â 6¿ù 7ÀÏ
Index
Return to Main Contents
 

À̸§

accept - ¼ÒÄÏ¿¡ ¿¬°áÀ» ¹Þ¾ÆµéÀδÙ.  

»ç¿ë¹ý

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

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

¼³¸í

accept ÇÔ¼ö´Â ¿¬°á-±â¹Ý ¼ÒÄÏ Å¸ÀÔ¿¡ (SOCK_STREAM, SOCK_SEQPACKET ±×¸®°í SOCK_RDM) »ç¿ëµÈ´Ù. ÀÌ°ÍÀº ¹Ì°áÀÎ ¿¬°áµéÀ» À§ÇÑ Å¥¿¡¼­ óÀ½ ¿¬°áÀ» »Ì¾Æ s¿Í °ÅÀÇ °°Àº Ư¼ºÀ» °®´Â »õ·Î ¿¬°áµÈ ¼ÒÄÏÀ» ¸¸µç´Ù. ±×¸®°í ¼ÒÄÏ¿¡ »õ ÆÄÀÏ ±â¼úÀÚ¸¦ ÇÒ´çÇϸç ÀÌ°ÍÀ» ¹ÝȯÇÑ´Ù. »õ·Î »ý¼ºµÈ ¼ÒÄÏÀº ´õÀÌ»ó ±â´Ù¸®´Â(listen) »óÅ°¡ ¾Æ´Ï´Ù. ¿ø·¡ÀÇ ¼ÒÄÏ s ´Â ÀÌ ½Ã½ºÅÛ ÄÝ¿¡ ÀÇÇØ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. ÆÄÀÏ ±â¼úÀÚ ÇÁ·¡±×Áß ¾î¶² °ÍÀº (ºñ-ºÀ¼â³ª async »óÅ°°ÀÌ F_SETFL fcntlÀ» °¡Áö°í ¼³Á¤ÇÒ¼ö ÀÖ´Â ¸ðµç °Í) accept ¸¦ ÅëÇØ »ó¼ÓµÇÁö ¾Ê´Â´Ù.

ÀÎÀÚ s ´Â socket(2)À¸·Î ¸¸µé¾îÁø ¼ÒÄÏÀ̸ç, bind(2)·Î ·ÎÄà ÁÖ¼Ò¸¦ ¹­°í listen(2)ÈÄ¿¡ ¿¬°áÀ» ±â´Ù¸°´Ù.

ÀÎÀÚ addr ´Â sockaddr ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ ±¸Á¶Ã¼´Â Åë½Å Ãþ(communication layer) À¸·Î ¾Ë·ÁÁø Á¢¼Ó ½ÇüÀÇ ÁÖ¼Ò°¡ ä¿öÁø´Ù. addr ÀÎÀÚ¿¡°Ô Àü´ÞµÇ´Â ÁÖ¼ÒÀÇ Á¤È®ÇÑ Çü½ÄÀº socket °¡Á·( socket(2)°ú ÇÁ·ÎÅäÄÝ ¸Ç ÆäÀÌÁö¸¦ ÂüÁ¶Çضó.) ¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. addrlen ÀÎÀÚ´Â °ª-°á°ú ÆĶó¹ÌÅÍÀÌ´Ù: ±×°ÍÀº addr°¡ °¡¸®Å°´Â ±¸Á¶Ã¼ÀÇ Å©±â¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.;¸®ÅϽà ±×°ÍÀº ¹ÝȯµÈ ÁÖ¼ÒÀÇ ½ÇÁ¦ ±æÀÌ(¹ÙÀÌÆ®)¸¦ Æ÷ÇÔÇÑ´Ù. addr °¡ NULLÀ̶ó¸é ¾î¶²°Íµµ ä¿öÁöÁö ¾Ê´Â´Ù.

¸¸ÀÏ ¹Ì°áÀÎ ¿¬°áµéÀÌ Å¥¿¡ Á¸ÀçÇÑ´Ù¸é ±×¸®°í ¼ÒÄÏÀÌ ºñ-ºÀ¼â·Î½á Ç¥½ÃµÇÁö ¾Ê¾Ò´Ù¸é, accept ´Â ¿¬°áÀÌ Á¸ÀçÇÒ¶§±îÁö È£ÃâÀÚ¸¦ ºÀ¼âÇÑ´Ù. ¸¸ÀÏ ¼ÒÄÏÀÌ ºñ-ºÀ¼âÀÌ°í ¹Ì°áÀÎ ¿¬°áµéÀÌ Å¥¿¡ Á¸ÀçÇÑ´Ù¸é, accept ´Â EAGAINÀ» ¹ÝȯÇÑ´Ù.

¼ÒÄÏ¿¡ µé¾î¿À´Â ¿¬°áµéÀ» ÀνÄÇϱâ À§ÇØ, ¿©·¯ºÐÀº select(2)³ª poll(2)À» »ç¿ëÇÒ¼ö ÀÖ´Ù. »õ·Î¿î ¿¬°áÀÌ ½ÃµµµÇ¾úÀ»¶§ Àб⠰¡´ÉÇÑ À̺¥Æ®°¡ Àü´ÞµÇ¸ç ¿©·¯ºÐÀº ±× ¿¬°áÀ» À§ÇÑ ¼ÒÄÏÀ» °¡Áö±â À§ÇØ accept ¸¦ È£ÃâÇÑ´Ù. ¼±ÅÃÀûÀ¸·Î, ¿©·¯ºÐÀº È°µ¿ÀÌ ¼ÒÄÏ¿¡¼­ ÀϾÀ»¶§ SIGIO ¸¦ Àü´ÞÇϱâ À§ÇØ ¼ÒÄÏÀ» ¼³Á¤ÇÒ¼ö ÀÖ´Ù.; ¼¼ºÎ»çÇ×À» À§Çؼ­´Â socket(7)¸¦ ÂüÁ¶Çضó.

DECNet °°ÀÌ ¸íÄèÇÑ ½ÂÀÎÀ» ¿ä±¸ÇÏ´Â ÇÁ·ÎÅäÄÝ¿¡¼­, accept ´Â ´ÜÁö ´ÙÀ½ ¿¬°á ¿ä±¸¸¦ Å¥¿¡¼­ »©³»°í ½ÂÀÎÀ» À̾߱âÇÏÁö´Â ¾Ê´Â°ÍÀ¸·Î½á »ý°¢µÉ¼ö ÀÖ´Ù. È®ÀÎÀº »õ ÆÄÀÏ ±â¼úÀÚ¿¡ Á¤»óÀûÀÎ Àб⳪ ¾²±â¿¡ ÀÇÇØ ¾Ë¼ö ÀÖÀ¸¸ç °ÅÀýÀº »õ ¼ÒÄÏÀ» ´ÝÀ½À¸·Î½á ¾Ë¼ö ÀÖ´Ù. ÇöÀç ´ÜÁö DECNet¸¸ÀÌ ¸®´ª½º¿¡¼­ ÀÌ·¯ÇÑ Àǹ̷ÐÀ» °¡Áø´Ù.

 

ÁÖÀÇ

SIGIO °¡ Àü´ÞµÈ Èijª ¶Ç´Â select(2)³ª poll(2)°¡ Àб⠰¡´ÉÇÏ´Ù´Â À̺¥Æ®¸¦ ¹ÝȯÇÑÈÄ Ç×»ó ¿¬°áÀ» ±â´Ù¸®´Â °ÍÀº ¾Æ´Ï´Ù. ¿Ö³ÄÇϸé accept °¡ È£ÃâµÈ ÈÄ¿¡ ¿¬°áÀÌ ºñµ¿±âÀûÀÎ ³×Æ®¿÷ ¿¡·¯³ª ´Ù¸¥ ¾²·¹µå¿¡ ÀÇÇØ Á¦°ÅµÉ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·±ÀÏÀÌ ¹ß»ýÇÑ´Ù¸é È£ÃâÀº µµÂøÇÏ´Â ´ÙÀ½ ¿¬°áÀ» ±â´Ù¸®¸ç ºÀ¼â°¡ µÉ °ÍÀÌ´Ù. accept °¡ °áÄÚ ºÀ¼âµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» º¸ÀåÇϱâ À§ÇØ, Àü´ÞµÈ ¼ÒÄÏ s ´Â O_NONBLOCK Ç÷¡±× ¼³Á¤À» °¡Á®¾ß ÇÑ´Ù.( socket(7)¸¦ ÂüÁ¶Çضó.)

 

¹Ýȯ°ª

¿¡·¯½Ã -1ÀÌ ¹ÝȯµÈ´Ù. ¸¸ÀÏ ¼º°øÇÑ´Ù¸é, ¹Þ¾ÆµéÀÎ ¼ÒÄÏÀ» À§ÇÑ ±â¼úÀÚÀÎ À½ÀÌ ¾Æ´Ñ Á¤¼ö¸¦ ¹ÝȯÇÑ´Ù.  

¿¡·¯ HANDLING

Linux accept ´Â acceptÀÇ ¿¡·¯ Äڵ嶧¹®¿¡ »õ ¼ÒÄÏ¿¡ ÀÌ¹Ì ¹Ì°áÀÎ ³×Æ®¿÷ ¿¡·¯¸¦ Àü´ÞÇÑ´Ù. ÀÌ·¯ÇÑ ÇൿÀº BSD ¼ÒÄÏ ¼öÇà°ú´Â ´Ù¸£´Ù. ½Å·ÚÀûÀÎ ÀÛµ¿À» À§ÇØ ÀÀ¿ë ÇÁ·Î±×·¥Àº accept ÈÄ¿¡ ÇÁ·ÎÅäÄÝ¿¡ Á¤ÀÇµÈ ³×Æ®¿÷ ¿¡·¯µéÀ» °Ë»çÇØ¾ß ÇÑ´Ù. ±×¸®°í Àç½Ãµµ¿¡ ÀÇÇØ EAGAIN°°Àº ¿¡·¯¸¦ ó¸®ÇØ¾ß ÇÑ´Ù. TCP/IPÀÇ °æ¿ì, À̰͵éÀº ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP, ±×¸®°í ENETUNREACH ÀÌ´Ù.  

¿¡·¯

EAGAIN or EWOULDBLOCK
¼ÒÄÏÀÌ ºñ-ºÀ¼â·Î Ç¥½ÃµÇ¾ú°í ¾î¶² ¿¬°áµµ ¹Þ¾ÆµéÀ̱â À§ÇØ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
EBADF
±â¼úÀÚ°¡ À¯È¿ÇÏÁö ¾Ê´Ù.
ENOTSOCK
±â¼úÀÚ´Â ¼ÒÄÏÀÌ ¾Æ´Ï¶ó ÆÄÀÏÀ» °¡¸®Å²´Ù.
EOPNOTSUPP
°¡¸®Å°´Â ¼ÒÄÏÀÌ SOCK_STREAMŸÀÔÀÌ ¾Æ´Ï´Ù.
EFAULT
addr ÆĶó¹ÌÅÍ°¡ À¯Àú ÁÖ¼Ò °ø°£ÀÇ ¾²±â °¡´ÉÇÑ ºÎºÐÀÌ ¾Æ´Ï´Ù.
EPERM
¹æÈ­º® ±ÔÄ¢ÀÌ ¿¬°áÀ» ¸·´Â´Ù.
ENOBUFS, ENOMEM
¿©À¯ ¸Þ¸ð¸®°¡ ÃæºÐÇÏÁö ¾Ê´Ù. ÀÌ°ÍÀº ¸Þ¸ð¸® ÇÒ´çÀÌ ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡ ÀÇÇؼ­°¡ ¾Æ´Ï¶ó ¼ÒÄÏ ¹öÆÛ Á¦ÇÑ°ª¿¡ ÀÇÇØ Á¦ÇѵǾú´Ù´Â °ÍÀ» ÀǹÌÇϸç 100%ÀÏÄ¡ÇÏÁö´Â ¾Ê´Â´Ù.

°Ô´Ù°¡, »õ ¼ÒÄÏ°ú ÇÁ·ÎÅäÄÝÀ» À§ÇØ Á¤ÀÇµÈ ³×Æ®¿÷ ¿¡·¯µéÀÌ ¹ÝȯµÈ´Ù. ´Ù¾çÇÑ ¸®´ª½º Ä¿³ÎÀº EMFILE, EINVAL, ENOSR, ENOBUFS, EPERM, ECONNABORTED, ESOCKTNOSUPPORT, EPROTONOSUPPORT, ETIMEDOUT, ERESTARTSYS °°Àº ´Ù¸¥ ¿¡·¯µéÀ» ¹ÝȯÇÒ¼ö ÀÖ´Ù.  

ȣȯ

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 ¿¡·¯µéÀ» ¹®¼­È­ Çß´Ù.

 

ÁÖÀÇ

accept ÀÇ ¼¼¹ø° ÀÎÀÚ´Â ¿ø·¡ `int *`(±×¸®°í libc4 ±×¸®°í libc5 ±×¸®°í BSD 4.*, SunOS 4, SGI °°Àº ¸¹Àº ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­)·Î ¼±¾ðµÇ¾ú´Ù.; POSIX 1003.1g Ç¥ÁØ ÃʾÈÀº ÀÌ Å¸ÀÔÀ» `size_t *`À¸·Î ±×¸®°í SunOS 5¿¡¼­ ÀÌ·¸°Ô ¹Ù²Ù±æ ¿øÇß´Ù. POSIX ÃʾÈÀÌ `socklen_t *`ÀÌ µÈÈÄ Single Unix Specification°ú glibc2´Â ÀÌ·¸°Ô ÇÏ¿´´Ù. ¸®´©½º Åä¹ßÁîÀÇ ¸»À» ÀοëÇϸé: _Any_ sane library _must_ have "socklen_t" be the same size as int. ±×¹ÛÀÇ °ÍµéÀº BSD ¼ÒÄÏ ÃþÀ» ¸·´Â´Ù. POSIX´Â _did_¸¦ size_t·Î ¸¸µé¾úÀ¸¸ç ³ª´Â(±×¸®°í ³Ê¹« ¸¹Áö´Â ¾ÊÁö¸¸ ´Ù¸¥ »ç¶÷µé) ½ÇÁ¦·Î ¸Å¿ì ºÒ¸¸Á·½º·´´Ù. size_t´Â ¸Å¿ì ¹®Á¦°¡ ÀÖ´Ù. ¿Ö³ÄÇϸé size_t´Â 64-ºñÆ® ¾ÆÅ°ÅØÃÄ¿¡¼­ "int"ó·³ °ÅÀÇ °°Àº Å©±â°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ±×¸®°í ±×°ÍÀº "int"ó·³ °°Àº Å©±â¸¦ °¡Á®¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé BSD ¼ÒÄÏ ÀÎÅÍÆäÀ̽º°¡ ±×·¸±â ¶§¹®ÀÌ´Ù. ¾î¶µç, POSIX »ç¶÷µéÀº °á±¹ °è±â¸¦ °¡Áö°í "socklen_t"¸¦ ¸¸µé¾ú´Ù. ±×µéÀº óÀ½ À§Ä¡¿¡¼­´Â °ÇµéÁö´Â ¾Ê¾ÒÁö¸¸ ÀÏ´Ü ±×µéÀº °íÃÆ°í ±×°ÍÀÌ ¸î¸î ÀÌÇØÇÒ¼ö ¾ø´Â ÀÌÀ¯¶§¹®¿¡ ŸÀÔÀ̶ó´Â À̸§À» °¡Á®¾ß ÇÑ´Ù´Â °ÍÀ» ´À²¼´Ù. (¾Æ¸¶ ´©±º°¡´Â ¿ø·¡ ¾î¸®¼®Àº ÀÏÀ» ÇÏ´Â °Í ÀÌ»óÀ¸·Î ¾ó±¼ Æȸ®´Â°ÍÀ» ÁÁ¾ÆÇÏÁö ¾Ê´Â´Ù. ±×¸®¼­ ±×µéÀº Á¶¿ëÈ÷ ±×µéÀÇ ½Ç¼ö¸¦ ´Ù½Ã À̸§ Áö¾ú´Ù.)  

°ü·Ã Ç׸ñ

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

¿ªÀÚ

Á¤°­ÈÆ <skyeyes@soback.kornet.net>, 2000³â 9¿ù 19ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
ÁÖÀÇ
¹Ýȯ°ª
¿¡·¯ HANDLING
¿¡·¯
ȣȯ
ÁÖÀÇ
°ü·Ã Ç׸ñ
¿ªÀÚ

This document was created by man2html, using the manual pages.
Time: 08:06:59 GMT, March 25, 2004