select

select ÇÔ¼ö´Â ÇÑ°³ ¶Ç´Â ±× ÀÌ»óÀÇ ¼ÒÄÏ »óŸ¦ °áÁ¤ÇÏ°í, µ¿±â ÀÔÃâ·ÂÀ» ¼öÇà ÇϱâÀ§ÇØ ÇÊ¿äÇÒ °æ¿ì ´ë±â ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

int select (
        int
nfds,
        fd_set FAR *
readfds,
        fd_set FAR *
writefds,
        fd_set FAR *
exceptfds,  
        const struct timeval FAR *
timeout
);

 

Parameters

nfds
[ÀÔ·Â] ¹öŬ¸® ¼ÒÄÏ°ú ȣȯµÇ´Â ¼ÒÄÏÀ» Á¦¿Ü ÇÏ°í´Â ÀÌ ¸Å°³º¯¼ö´Â ¹«½ÃµË´Ï´Ù. ¹öŬ¸® ¼ÒÄÏ¿¡¼­ ÀÌ ¸Å°³º¯¼ö´Â I/O º¯È­¸¦ °¨Áö ÇÒ ÃÑ ¼ÒÄÏÀÇ °¹¼ö+1 ÀÇ °ªÀ» ÁöÁ¤ÇÏ´Â ¿ëµµ·Î »ç¿ëÇÕ´Ï´Ù.

readfds
[ÀÔ/Ãâ·Â] Àбâ»óÅÂÀÇ º¯È­¸¦ °¨ÁöÇÒ ¼ÒÄÏÀ» ÁöÁ¤ÇÕ´Ï´Ù.

writefds
[ÀÔ/Ãâ·Â] ¾²±â»óÅÂÀÇ º¯È­¸¦ °¨ÁöÇÒ ¼ÒÄÏÀ» ÁöÁ¤ÇÕ´Ï´Ù.

exceptfds
[ÀÔ/Ãâ·Â] ¿¹¿Ü»óÅ º¯È­¸¦ °¨ÁöÇÒ ¼ÒÄÏÀ» ÁöÁ¤ÇÕ´Ï´Ù.

timeout
[ÀÔ·Â]
select ÇÔ¼ö°¡ ±â´Ù¸®±â À§ÇÑ ½Ã°£ÀÔ´Ï´Ù. NULL ÀÏ°æ¿ì ÁöÁ¤ÇÑ I/Oº¯È­°¡ ¹ß»ýÇßÀ» ¶§±îÁö °è¼Ó ±â´Ù¸³´Ï´Ù.

Remarks

select ÇÔ¼ö´Â ÇÑ°³ ¶Ç´Â ±× ÀÌ»óÀÇ ¼ÒÄÏ»óÅÂ(I/OÀÇ ¹ß»ýÀ¯¹« »óÅÂ)¸¦ °áÁ¤Çϴµ¥ »ç¿ëµË´Ï´Ù. FD_SET ±¸Á¶Ã¼ÀÇ Å¸ÀÔÀÇ ÀÎÀÚÀÎ readfds, writefds, exceptfds´Â °¢°¢ Àбâ, ¾²±â, ¿¹¿Ü»óȲ ¹ß»ý°ú °°Àº I/Oº¯È­°¡ ¹ß»ý ÇßÀ» ¶§ À̸¦ °¨ÁöÇÒ ´ë»óÀÌ µÇ´Â ¼ÒÄϵéÀ» ÁöÁ¤ÇÏ´Â ¹è¿­Çü ±¸Á¶Ã¼ ÀÔ´Ï´Ù. Áï, ÀÌ ¼¼°¡Áö ±¸Á¶Ã¼¸¦ ÅëÇÏ¿© ¾î¶² ¼ÒÄÏ¿¡¼­ ¾î¶² I/O º¯È­ ¹ß»ýÀ» °¨ÁöÇÒÁö¸¦ ¼±ÅÃÇÏ¿© ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. FD_SET ±¸Á¶Ã¼¸¦ ó¸®Çϱâ À§Çؼ­ ÀÏ·ÃÀÇ ¸ÅÅ©·ÎµéÀÌ Á¦°øµÇ°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ ¸ÅÅ©·ÎµéÀº ¹öŬ¸® ¼ÒÄÏ°ú ȣȯ¼ºÀÌ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸, ³»ºÎÀûÀΠǥÇö ¹æ¹ýÀº ±Ùº»ÀûÀ¸·Î ´Ù¸¨´Ï´Ù.

readfds ¸Å°³º¯¼ö¿¡´Â "ÀԷ¹ÞÀ» ¼ö ÀÖ´Â »óÅÂ"(readability)¿Í °°Àº ÀÔ·Â(Input)¿¡ ´ëÇØ º¯È­°¡ ¹ß»ý ÇßÀ»¶§ °¨ÁöÇÒ ´ë»óÀÌ µÇ´Â ¼ÒÄϵéÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦µé¾î ¼ÒÄÏÀÌ ¸®½¼ »óŶó¸é, »ó´ë¹æÀÇ Á¢¼ÓÀÇ ¿äû¿¡ ´ëÇÑ °¨Áö³ª, ¼ö½ÅÅ¥¿¡ µ¥ÀÌÅÍ°¡ ¼ö½ÅµÇ¾úÀ» ¶§ À̸¦ °¨Áö ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·± »óȲÀÌ °¨Áö µÇ¾úÀ»¶§ Á¢¼ÓÀ» Çã¿ë Çϰųª µ¥ÀÌÅ͸¦ ¼ö½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.

 writefds ¸Å°³º¯¼ö¿¡´Â "Ãâ·Â ÇÒ ¼ö ÀÖ´Â »óÅÂ"(writability)¿Í °°Àº Ãâ·Â(Output)¿¡ ´ëÇØ º¯È­°¡ ¹ß»ý ÇßÀ»¶§ °¨ÁöÇÒ ´ë»óÀÌ µÇ´Â ¼ÒÄϵéÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦µé¾î ¼ÒÄÏÀÌ connect ÇÔ¼ö¸¦ ó¸®ÇÏ°í ÀÖÀ¸¸ç, ¼ÒÄÏÀÌ ¼º°øÀûÀ¸·Î Á¢¼ÓÀÌ ¿Ï·áµÇ¾úÀ»¶§ ´Ù¸¥ µ¥ÀÌÅ͸¦ ¼Û½Å ÇÒ ¼ö ÀÖ´Ù ¶ó´Â º¯È­ÀÇ °¨Áö³ª, sendto, WSASendTo µîÀÇ ÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ¼öÇà µÉ¼ö ÀÖÀ»¶§°¡ ¾ðÁ¦ÀÎÁö °¨Áö ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·± »óȲÀÌ °¨Áö µÇ¾úÀ»¶§ ¼ÒÄÏ¿¡ ´ëÇÑ ´Ù¸¥ 󸮸¦ Çϰųª, µ¥ÀÌÅ͸¦ ¼Û½Å ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 exceptfds ¸Å°³º¯¼ö´Â out-of-band µ¥ÀÌÅÍÀÇ °¨Áö¸¦ À§Çؼ­, ¶Ç´Â ¿¹¿ÜÀûÀÎ ¿¡·¯ »óȲÀ» °¨ÁöÇϱâ À§Çؼ­ »ç¿ëµË´Ï´Ù.

 readfds, writefds, ¶Ç´Â exceptfds ¸Å°³º¯¼öÁß µÎ°³´Â NULLÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸, Àû¾îµµ ÇÑ°³´Â NULL ÀÌ¸é ¾ÊµË´Ï´Ù. ¶ÇÇÑ NULLÀÌ ¾Æ´Ñ FD_SET ±¸Á¶Ã¼´Â Àû¾îµµ ÇÑ°³ÀÇ ¼ÒÄÏÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù´Â Á¡À» ¸í½ÉÇϼ¼¿ä.

windsock(2).h Çì´õ ÆÄÀÏ¿¡´Â ¼ÒÄϱâ¼úÀÚ ¼¼Æ®(ex. FD_SET)¸¦ ó¸®Çϱâ À§Çؼ­ 4°¡Áö Á¾·ùÀÇ ¸ÅÅ©·Î¸¦ Á¤ÀÇ ÇØ ³õ°í ÀÖ½À´Ï´Ù. FD_SETSIZE °ªÀº ¼ÒÄϱâ¼úÀÚ ¼¼Æ®(ex. FD_SET)¿¡ µé¾î°¥ ¼ö ÀÖ´Â ¼ÒÄÏ ±â¼úÀÚÀÇ ÃÖ´ë °¹¼ö¸¦ °áÁ¤ÇÏ´Â ¼öÄ¡ÀÔ´Ï´Ù. (FD_SETSIZE ÀÇ ±âº»Ä¡´Â 64ÀÔ´Ï´Ù. ÀÌ°ªÀº winsock(2).h Çì´õÆÄÀÏ¿¡¼­ FD_SETSIZE °¡ Á¤ÀÇ µÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì FD_SETSIZE¸¦ 64·Î Á¤ÀÇ ÇϹǷΠÀÌ Çì´õÆÄÀÏÀ» ÀÎŬ·çµå ÇϱâÀü¿¡ ´Ù¸¥ °ªÀ» FD_SETSIZE¿¡ Á¤ÀÇÇؼ­ º¯°æ ÇÒ ¼ö ÀÖ½À´Ï´Ù.)
 ³»ºÎÀûÀ¸·Î, ¼ÒÄϱâ¼úÀÚ ¼¼Æ®·Î »ç¿ëµÇ´Â FD_SET ±¸Á¶Ã¼ ¾È¿¡ ÀÖ´Â ¼ÒÄÏÇÚµéÀº ¹öŬ¸® À¯´Ð½º¿Í °°Àº ºñÆ® Ç÷¡±×·Î Ç¥ÇöµÇÁö ¾Ê½À´Ï´Ù(¹öŬ¸® À¯´Ð½º ¿¡¼­´Â ¼¼Æ®µÇ¾î ÀÖ´Ù´Â °ÍÀ» 1·Î ±×·¸Áö ¾ÊÀº °ÍÀ» 0À¸·Î Ç¥ÇöÇÏÁÒ.). ÀÌ ¼ÒÄÏÇÚµé µ¥ÀÌÅÍ Ç¥Çö¹ýÀº È®½ÇÈ÷ Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Õ´Ï´Ù. ÀÌ·¸°Ô È®½ÇÈ÷ Á¤ÀÇ ÇØ ³õÁö ¾ÊÀº ÀÌÀ¯´Â, ´Ù¸¥ ¼ÒÄÏȯ°æ »çÀÌ¿¡¼­ ¼ÒÇÁÆ®¿þ¾î¸¦ Æ÷Æà ÇÏ·ÁÇÒ ¶§, ¸¹Àº È®À强À» Á¦°øÇØ ÁÖ±â À§ÇÔÀÔ´Ï´Ù. FD_SET ±¸Á¶Ã¼¸¦ ó¸®ÇÏ´Â ¸ÅÅ©·Î´Â ´ÙÀ½°ú °°½À´Ï´Ù.

FD_CLR(s, *set)
    ÁöÁ¤µÈ ¼ÒÄÏ ±â¼úÀÚ(descriptor)¸¦ ¼¼Æ®¿¡¼­ Á¦°Å ÇÕ´Ï´Ù.

FD_ISSET(s, *set)
    ÁöÁ¤µÈ ¼ÒÄÏ ±â¼úÀÚ°¡ ¼¼Æ®¿¡ ÀÖÀ» °æ¿ì 0ÀÌ ¾Æ´Ñ°ªÀ» ¹ÝȯÇÏ°í, ¾øÀ» °æ¿ì 0À» ¹ÝȯÇÕ´Ï´Ù.

FD_SET(s, *set)
    ÁöÁ¤µÈ ¼ÒÄÏ ±â¼úÀÚ¸¦ ¼¼Æ®¿¡ Ãß°¡ ÇÕ´Ï´Ù.

FD_ZERO(*set)
    ¸ðµç ¼ÒÄÏ ±â¼úÀÚ¸¦ ¼¼Å©¿¡¼­ Á¦°ÅÇÕ´Ï´Ù.

timeout(TIMEVAL) ¸Å°³º¯¼ö°¡ NULL ÀÏ °æ¿ì select ÇÔ¼ö´Â Çϳª ÀÌ»óÀÇ ¼ÒÄÏÀÌ Àб⠰¡´ÉÇÑ °ÍÀÌ µÇ°Å³ª, ¾²±â °¡´ÉÇÑ °ÍÀÌ µÇ°Å³ª, ¿¡·¯ »óȲÀÌ ¹ß»ýÇÒ ¶§±îÁö ¹«Á¦ÇÑÀ¸·Î ´ë±âÇÕ´Ï´Ù. NULLÀÌ ¾Æ´Ï¶ó¸é, select ÇÔ¼ö´Â Çϳª ÀÌ»óÀÇ ¼ÒÄÏÀÌ ÁöÁ¤µÈ ±âÁØ(Àϱâ, ¾²±â, ¿¹¿Ü)À» ¸¸³ª°Å³ª timeout °ª¿¡ Àϸ¦ ¶§±îÁö ´ë±âÇÕ´Ï´Ù. timeout ¸Å°³º¯¼ö°¡ {0,0}À¸·Î ÃʱâÈ­ µÇ¾îÀÖ´Ù¸é, select ÇÔ¼ö´Â ¹Ù·Î ¸®Å쵃 °ÍÀÔ´Ï´Ù. ÀÌ·¸°Ô ÃʱâÈ­ ÇÏ´Â °ÍÀº ¼±ÅÃµÈ ¼ÒÄÏÀÇ »óŸ¦ "poll" Çϱâ À§Çؼ­ »ç¿ë ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

Note : select ÇÔ¼ö´Â WSAAsyncSelect ³ª WSAEventSelect ÇÔ¼ö·Î µî·ÏµÈ ¼ÒÄÏ À̺¥Æ®¿¡ ´ëÇؼ­ ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù.

Return Values

select ÇÔ¼ö´Â FD_SET ±¸Á¶Ã¼¿¡ Æ÷ÇԵǾî ÁöÁ¤µÈ I/O¿¡ ÁغñÇÏ°í ÀÖ´Â ¼ÒÄÏ ÇÚµéÀÇ ÃÑ °¹¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù. ÁöÁ¤µÈ ŸÀӾƿô ½Ã°£À» ÃÊ°úÇϸé, 0À» ¹ÝȯÇÏ°í ¿¡·¯°¡ ¹ß»ý ÇÑ °æ¿ì SOCKET_ERRORÀ» ¹ÝȯÇÏ°í, WSAGetLastError ÇÔ¼ö·Î ƯÁ¤ÇÑ ¿¡·¯Äڵ带 ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

Error Codes

WSANOTINITIALISED

ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱâ Àü¿¡ ¼º°øÀûÀÎ WSAStartup ÇÔ¼öÀÇ È£ÃâÀÌ ¾ø¾ú½À´Ï´Ù.

WSAEFAULT
 

À©¼ÓÀÌ ³»ºÎÀûÀÎ µ¿ÀÛÀ» À§ÇÑ ¸®¼Ò½º¸¦ ÇÒ´ç¹ÞÁö ¸øÇ߰ųª, readfds, writefds, exceptfds ¶Ç´Â timeval ¸Å°³º¯¼ö°¡ À߸øµÈ °ªÀÔ´Ï´Ù.

WSAENETDOWN

³×Æ®¿÷ ¼­ºê ½Ã½ºÅÛ¿¡ ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.

WSAEINVAL

timeout °ªÀÌ À߸ø³Ñ°ÜÁ³°Å³ª, ¼ÒÄÏ ±â¼úÀÚ ¼¼Æ®¸¦ ³Ñ°ÜÁÖ´Â 3°³ÀÇ ¸Å°³º¯¼ö°¡ ¸ðµÎ NULL ÀÔ´Ï´Ù.

WSAEINTR

ºí·ÏÅ· È£ÃâÀÌ WSACancelBlockingCall ÇÔ¼ö¿¡¼­ Ãë¼ÒµÇ¾ú½À´Ï´Ù.

WSAEINPROGRESS

ºí·°Å· À©¼Ó v1.1 ÀÌ ÇöÀç ÁøÇà ÁßÀ̰ųª, ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ°¡ Äݹé ÇÔ¼ö¸¦ ¿©ÀüÈ÷ ó¸®ÇÏ°í ÀÖ½À´Ï´Ù.

WSAENOTSOCK

¼ÒÄÏ ±â¼úÀÚ ¼¼Æ® ÁßÀÇ Çϳª°¡ ¼ÒÄÏÀÌ ¾Æ´Ñ Ç׸ñÀ» Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù.

QuickInfo

Windows NT : »ç¿ë°¡´É
Windows : »ç¿ë°¡´É
Windows CE : ¹öÁ¯ 1.0 ±×¸®°í ±×ÀÌÈÄÀÇ ¹öÁ¯¿¡¼­ »ç¿ë°¡´É
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

See Also

overview, accept, connect, recv, recvfrom, send, WSAAsyncSelect, WSAEventSelect