WSARecv

WSARecv ÇÔ¼ö´Â Á¢¼ÓµÈ »ó´ë¹æ ¼ÒÄÏÀ¸·ÎºÎÅÍ ³¯¶ó¿Â µ¥ÀÌÅ͸¦ ¾ò¾î³»´Â ÇÔ¼öÀÔ´Ï´Ù.

int WSARecv (
        SOCKET   
s,
        LPWSABUF   
lpBuffers,
        DWORD   
dwBufferCount,
        LPDWORD   
lpNumberOfBytesRecvd,
        LPDWORD  
lpFlags,
        LPWSAOVERLAPPED  
lpOverlapped,
        LPWSAOVERLAPPED_COMPLETION_ROUTINE   
lpCompletionROUTINE
);

 

Parameters

s
[ÀÔ·Â] Á¢¼ÓµÈ ¼ÒÄÏÀÇ ±â¼úÀÚ

lpBuffers
[ÀÔ/Ãâ·Â]
WSABUF ±¸Á¶Ã¼ÀÇ ¹è¿­ Æ÷ÀÎÅÍ·Î, °¢°¢ÀÇ WSABUF ±¸Á¶Ã¼´Â µ¥ÀÌÅ͸¦ ´ãÀº ¹öÆÛ¿Í ¹öÆÛÀÇ ±æÀ̸¦ °¡Áö°Ô µË´Ï´Ù.

dwBufferCount
[ÀÔ·Â] lpBuffer ¹è¿­¿¡ ÀÖ´Â
WSABUF ±¸Á¶Ã¼( ¹è¿­ÀÇ ¿¤¸®¸ÕÆ®)ÀÇ °³¼ö

lpNumberOfBytesRecvd
[Ãâ·Â] µ¥ÀÌÅÍ ¼ö½Å ÀÛ¾÷ÀÌ ¹Ù·Î ¿Ï·áµÈ °æ¿ì, ÀÌ ÇÔ¼öÀÇ È£Ãâ·Î Àо µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö¸¦ Æ÷ÀÎÆ® ÇÕ´Ï´Ù.

lpFlags
[ÀÔ/Ãâ·Â] ¾î¶°ÇÑ ¹æ½ÄÀ¸·Î ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀΰ¡¸¦ ³ªÅ¸³»´Â Ç÷¡±×

lpOverlapped
[ÀÔ·Â]
WSAOVERLAPPED ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ ( ³Í-¿À¹ö·¦ ¼ÒÄÏ¿¡¼­´Â ¹«½ÃµË´Ï´Ù)

lpCompletionRoutine
[ÀÔ·Â] ¼ö½Å ÀÛ¾÷ÀÌ ¿Ï·áµÇ¾úÀ» ¶§ È£ÃâµÉ ¿Ï·á ·çƾÀÇ Æ÷ÀÎÅÍ (³Í-¿À¹ö·¦µå ¼ÒÄÏ¿¡¼­´Â ¹«½ÃµË´Ï´Ù.)

 

Remarks

WSARecv ÇÔ¼ö´Â recv ÇÔ¼ö¿Í ºñ±³Çغ¼ ¶§, ±â´ÉÀûÀ¸·Î ¾Æ·¡ÀÇ 3°¡Áö ¸é¿¡¼­ ´õ ¸¹Àº ±â´ÉÀ» Áö¿øÇÕ´Ï´Ù.

1. ¿À¹ö·¦(±»ÀÌ ¿ï³ª¶ó¸»·Î ÇÏÀÚ¸é, "µ¿½Ã´ÙÁß" À̶ó°í ÇØ¾ß Çϳª¿ä?) ¼ö½Å ¿¬»êÀ» ¼öÇàÇϱâ À§Çؼ­ ¿À¹ö·¦ ¼ÒÄÏ°ú ¿¬µ¿ÇÏ¿© »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

2. ¼öÁý/ºÐ»ê I/O ÀÛ¾÷À» Çϱâ À§Çؼ­ ¿©·¯°³ÀÇ ¼ö½Å¹öÆÛ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

3. lpFlag ¸Å°³º¯¼ö´Â ÀԷ¿ë°ú Ãâ·Â¿ë ¸Å°³º¯¼ö·Î »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Ç÷¡±×·Î MSG_PARTIAL Ç÷¡±× ºñÆ®ÀÇ »óŸ¦ °¨ÁöÇÒ ¼ö ÀÖÁö¸¸, MSG_PARTIAL Ç÷¡±×´Â ¸ðµç ÇÁ·ÎÅäÄÝ¿¡¼­ Áö¿øµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.

WSARecv ÇÔ¼ö´Â s ¸Å°³º¯¼ö·Î ÁöÁ¤µÈ Á¢¼ÓµÈ ¼ÒÄÏÀ̳ª ¹ÙÀεåµÈ Á¢¼ÓµÇÁö ¾ÊÀº ¼ÒÄÏ¿¡ ´ëÇؼ­, µé¾î¿À´Â µ¥ÀÌÅ͸¦ Àо´Âµ¥ »ç¿ëÇÕ´Ï´Ù. ¼ÒÄÏ¿¡ ÁöÁ¤µÈ ·ÎÄà ¾îµå·¹½º´Â ¹Ýµå½Ã ¾Ë·ÁÁö °ÍÀ̾î¾ß ÇÕ´Ï´Ù. ¼­¹ö ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â º¸Åë bind ÇÔ¼ö³ª, accept ¶Ç´Â WSAAccept ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄþîµå·¹½º¸¦ ¹­¾îÁÝ´Ï´Ù. Ŭ¶óÀ̾ðÆ® ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â connect, WSAConnect, sendto, WSASendTo ÇÔ¼ö³ª, WSAJoinLeaf ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄà ¾îµå·¹½º¸¦ ¹­¾îÁÖ°Ô µË´Ï´Ù.

¿À¹ö·¦ ¼ÒÄÏ¿¡¼­, WSARecv ÇÔ¼ö´Â µé¾î¿À´Â µ¥ÀÌÅ͸¦ ÇÑ °³ ¶Ç´Â ±×ÀÌ»óÀÇ ¹öÆÛ¿¡ ºÙ¿© ³Öµµ·Ï »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à ÀÛ¾÷ÀÌ ¹Ù·Î ³¡³¯ ¼ö ¾ø´Â »óȲ À̶ó¸é, ¸¶Áö¸· ¿Ï·á »óÅ´ ¿Ï·á·çƾ(completion routine)À̳ª, WSAGetOverlappedResult ÇÔ¼ö¸¦ »ç¿ëÇØ ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù.

lpOverlapped ¿Í lpCompletionRoutine ¸Å°³º¯¼ö°¡ ¸ðµÎ´Ù NULL À̶ó¸é, ÀÌ ÇÔ¼ö¿¡¼­ ÁöÁ¤µÈ ¼ÒÄÏÀº ³Í-¿À¹ö·¦ ¼ÒÄÏó·³ ´Ù·ç¾î Áú °ÍÀÔ´Ï´Ù.

³Í-¿À¹ö·¦ ¼ÒÄÏ¿¡¼­ ÀÌ ÇÔ¼ö°¡ »ç¿ëµÈ´Ù¸é, ºí·ÏÅ· 󸮺κÐÀº Ç¥ÁØ recv ÇÔ¼ö¿Í °°Àº Àǹ̷Πµ¿ÀÛÇÏ°Ô µË´Ï´Ù. ±¼±¸... lpOverlapped ¿Í lpCompletionRoutine ¸Å°³º¯¼ö´Â ¹«½ÃµË´Ï´Ù. ÀÌ¹Ì ¼ö½ÅµÇ°í ¹öÆÛ¸µµÈ µ¥ÀÌÅÍ´Â ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÁöÁ¤Çß´ø »ç¿ëÀÚ ¹öÆÛ¿¡ Ä«ÇÇµÉ °ÍÀÔ´Ï´Ù. ºí·ÏÅ· ¼ÒÄÏ¿¡¼­ ¼ö½ÅµÈ µ¥ÀÌÅ͵µ ¾ø°í, ¹öÆÛ¸µµÈ µ¥ÀÌÅ͵µ ¾ø´Â °æ¿ì ÀÌ ÇÔ¼ö¸¦ È£ÃâÇß´Ù¸é, ÀÐÀ» µ¥ÀÌÅÍ°¡ »ó´ë¹æÀ¸·ÎºÎÅÍ ³¯¶ó¿Ã ¶§ ±îÁö ºí·ÏÅ·¿¡ °É¸®°Ô µË´Ï´Ù. À©¼Ó2 ¿¡¼­´Â ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ À־ ±âº»ÀûÀÎ ºí·ÏÅ· ŸÀӾƿô ¸ÅÄ¿´ÏÁòÀ» Á¤ÀÇÇÏ°í ÀÖÁö´Â ¾Ê½À´Ï´Ù. (Çã°Æ~ Ä¡¸íÀûÀÌ´Ù...)

¹ÙÀÌÆ®-½ºÆ®¸² ÇÁ·ÎÅäÄÝ(TCP)°ú °°Àº ÇÁ·ÎÅäÄÝ¿¡ ´ëÇؼ­ ½ºÅÃÀº Á¦°øµÈ ¹öÆÛ°ø°£¿¡ °¡´ÉÇÑ ¸¹Àº µ¥ÀÌÅ͸¦ ¹Ýȯ ÇÏ·Á°í ½ÃµµÇÕ´Ï´Ù. ÇÏÁö¸¸, ´ÜÀÏ ¹ÙÀÌÆ®ÀÇ ¼ö½ÅÀÛ¾÷Àº ÄÝ·¯¸¦ ºí·ÏÅ· ½ÃÅ°Áö ¾ÊÀ» ¸¸Å­ ÃæºÐÇÕ´Ï´Ù. ´ÜÀÏ ¹ÙÀÌÆ®ÀÌ»óÀÌ ¹Ýȯ µÈ´Ù°í ÇÏ´Â º¸ÀåÀº ¾ø½À´Ï´Ù.  ¸Þ½ÃÁö ÁöÇâÇü°ú(UDP) °°Àº ÇÁ·ÎÅäÄÝ ¿¡¼­´Â ÄÝ·¯¸¦ ºí·ÏÅ·¿¡ °É¸®Áö ¾Ê°Ô Çϱâ À§Çؼ­ °¡µæÂù ¸Þ½ÃÁö°¡ ÇÊ¿äÇÕ´Ï´Ù. - ¤Ð¤Ð ¾Æ~ ¿À´Ãµµ ÄÁµð¼ÇÀÌ ¾ÊÁÁÀº °É±î? ¿ÖÀ̸® Çؼ®ÀÌ ²¬²ô·´´Ü ¸»ÀԴϱî. ¾Æ·¡¿¡ ¿ø¹®À» ´ã¾Ò½À´Ï´Ù. - ÃÊ ÇãÁ¢ ³¯¸² ¹ø¿ª -

<¿ø¹®>For protocols acting as byte-stream protocols the stack tries to return as much data as possible subject to the supplied buffer space and amount of received data available. However, receipt of a single byte is sufficient to unblock the caller. There is no guarantee that more than a single byte will be returned. For protocols acting as message-oriented, a full message is required to unblock the caller.

ÇÁ·ÎÅäÄÝÀÌ ¹ÙÀÌÆ®-½ºÆ®¸²À¸·Î µ¿ÀÛÇÏ°Ç ±×·¸Áö ¾Ê´ø°£¿¡, WSAPROTOCOL_INFO ±¸Á¶Ã¼¿¡ XPI_MESSAGE_ORIENTED ¿Í XPI_PSEUDO_STREAM À» ¼³Á¤Çؼ­, ±×¸®±¸, ÀÌÇÔ¼öÀÇ Ç÷¡±× ¸Å°³º¯¼ö¿¡ MSG_PARTIAL Ç÷¡±×¸¦ ¼³Á¤Çؼ­ ÀÌ ÇÔ¼ö°¡ ¾î¶² ÇÁ·ÎÅäÄÝ·Î µ¿ÀÛÇÏ´ÂÁö °áÁ¤µË´Ï´Ù. ¾Æ·¡ÀÇ Å×À̺íÀÌ ÀÌ¿Í °ü·ÃµÈ Á¶ÇÕ¿¡ ´ëÇؼ­ ¿ä¾à ÇØ ³õ¾Ò½À´Ï´Ù. ( º°Ç¥(*)´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù´Â ÀÇ¹Ì ÀÔ´Ï´Ù)

  XP1_MESSAGE_ORIENTED   XP1_PSEUDO_STREAM  MSG_PARTIAL Acts as
not set * * byte-stream
* set * byte-stream
set not set set byte-stream
set not set not set message-oriented

lpBuffers ¸Å°³º¯¼ö·Î ÁöÁ¤µÇ´Â WSABUF ±¸Á¶Ã¼ÀÇ ¹è¿­Àº ÀÓ½ÃÀûÀÔ´Ï´Ù. ¿À¹ö·¦ ¹æ½Ä¿¡ ÀÇÇؼ­ WSARecv ÇÔ¼ö°¡ ¿Ï·áµÇ¾ú´Ù¸é, ÀÌ ÇÔ¼ö¸¦ ¹Ýȯ ÇϱâÀü¿¡ WSABUF ±¸Á¶Ã¼ÀÇ ³»¿ëÀ» ijÃÄ/Ä«ÇÇ ÇØ ³õ´Â ÀÏÀº ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õÀÇ Ã¥ÀÓÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾îÇø®ÄÉÀ̼ÇÀº ½ºÅñâ¹ÝÀÇ WSABUF ±¸Á¶Ã¼ ¹è¿­À» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

SOCK_STREAM °ú °°Àº ¹ÙÀÌÆ® ½ºÆ®¸² Çü½ÄÀÇ ¼ÒÄÏ¿¡¼­, µé¾î¿À´Â µ¥ÀÌÅÍ´Â, ¹öÆÛ°¡ °¡µæ Âû ¶§ ±îÁö, ¶Ç´Â Á¢¼ÓÀÌ Á¾·áµÉ ¶§ ±îÁö, ¶Ç´Â, ³»ºÎÀÇ ¹öÆÛ¸µµÈ µ¥ÀÌÅ͸¦ ´Ù ½á ¹ö¸± ¶§ ±îÁö ¹öÆÛ¿¡ ä¿öÁö°Ô µË´Ï´Ù. µé¾î¿À´Â µ¥ÀÌÅÍ°¡ ¸ðµç ¹öÆÛ¿¡ ä¿öÁö°Ç ¸»°Ç °ü°è¾øÀÌ ÀÛ¾÷¿Ï·áÀÇ ¾Ë¸²Àº ¿À¹ö·¦ ¼ÒÄÏ¿¡ ´ëÇؼ­ ¹ß»ýÇÏ°Ô µË´Ï´Ù.

SOCK_DGRAM °ú °°Àº ¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏ¿¡¼­, µé¾î¿À´Â ¸Þ½ÃÁö´Â Á¦°øµÈ ¹öÆÛÀÇ ÃÑ Å©±â¿¡ À̸£±â±îÁö Á¦°øµÈ ¹öÆÛ¿¡ ä¿öÁö°Ô µË´Ï´Ù. ±¼±¸, ÀÛ¾÷¿Ï·áÀÇ ¾Ë¸²ÀÌ ÁöÁ¤µÈ ¿À¹ö·¦ ¼ÒÄÏ¿¡ ´ëÇؼ­ ¹ß»ýÇÏ°Ô µË´Ï´Ù. ¸Þ½ÃÁö°¡ ÁöÁ¤µÈ ¹öÆÛÀÇ Å©±âº¸´Ù ´õ Å« °æ¿ì, ¹öÆ۴ óÀ½ ¸Þ½ÃÁöÀÇ ½ÃÀÛ ºÎºÐºÎÅÍ ¹öÆÛ¿¡ ä¿öÁö°Ô µË´Ï´Ù. ¸¸¾à MSG_PARTIAL ±â´ÉÀÌ ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ¿¡¼­ Áö¿øÀÌ µÈ´Ù¸é, MSG_PARTIAL Ç÷¡±×¸¦ lpFlags ¿¡ ¼³Á¤ÇÏ°í, ¹Ù·Î ´ÙÀ½¿¡ ³ª¸ÓÁö ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÒ¼ö ÀÖ°Ô µË´Ï´Ù. MSG_PARTIAL ÀÌ Áö¿øµÇÁö ¾ÊÁö¸¸, ÇÁ·ÎÅäÄÝÀÌ ½Å·Ú¼ºÀÌ ÀÖ´Ù¸é, WSARecv ÇÔ¼ö´Â WSAEMSGSIZE ¿¡·¯Äڵ带 ¹ß»ýÇÒ °ÍÀÌ°í, ¹Ù·Î ´ÙÀ½À¸·Î º¸´Ù ´õ Å« ¹öÆÛ¸¦ »ç¿ëÇØ ¸ðµç µ¥ÀÌÅ͸¦ ¾ò¾î³¾ ¼ö ÀÖ°Ô µË´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì( ÇÁ·ÎÅäÄÝÀÌ ½Å·Ú¼ºÀÌ ¾ø°í, MSG_PARTIALÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é) ÃÊ°úµÈ µ¥ÀÌÅÍ´Â ¼Õ½ÇµÇ°Ô µË´Ï´Ù. ±×¸®°í, WSARecv ÇÔ¼ö´Â WSAEMSGSIZE ¿¡·¯Äڵ带 ¹ß»ýÇÏ°Ô µË´Ï´Ù.

Á¢¼Ó ÁöÇâÇü ¼ÒÄÏ¿¡¼­ WSARecv ÇÔ¼ö´Â ½ºÆ®¸² ¼ÒÄÏ(SOCK_STREAM)ÀÌ°Ç ¸Þ½ÃÁö ÁöÇâ ¼ÒÄÏ(SOCK_DGRAM) ÀÌ°Ç, °¡»ó¿¬°á¸ÁÀÇ ¿ì¾ÆÇÑ Á¾·á("graceful termination" : °¡Àå ÀÌ»óÀûÀÎ Á¾·á¸¦ ¸»ÇÏ´Â ´ë¸í»ç)ÀÇ ¹ß»ýÀ» ¾Ë¾Æ ³¾ ¼ö ÀÖ½À´Ï´Ù. ¹«½¼ ¸»ÀÌ³Ä Çϸé, ½ºÆ®¸² ¼ÒÄÏ¿¡¼­ 0 ¹ÙÀÌÆ®¸¦ Àоú´Ù¸é(ÇÔ¼ö°¡ 0À» ¸®ÅÏÇÏ°í, lpNumberOfBytesRecvd ¸Å°³º¯¼ö°¡ 0À¸·Î µÈ °æ¿ìÁÒ), ¼ÒÄÏÀÌ ¿ì¾ÆÇÑ Á¾·á¸¦ Çß´Ù ¶ó°í ÆÇ´ÜÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ù. ¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏ(SOCK_DGRAM)ÀÇ °æ¿ì 0 ¹ÙÀÌÆ®ÀÇ ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÏ°í, WSAECONNRESET ¿¡·¯Äڵ尡 ¹ß»ýÇÏ¿´´Ù¸é, ¼ÒÄÏÀÌ ¿ì¾ÆÇÑ Á¾·á(graceful closure)¸¦ Çß´Ù ¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ°Ô µË´Ï´Ù. ¼ÒÄÏÀÌ °­Á¦¸®¼Â µÈ °æ¿ì´Â WSAECONNRESET À̶ó´Â ¿¡·¯Äڵ尡 ¹ß»ýÇÏ°Ô µÈ´Ù´Â °ÍÀ» Âü°í·Î ¾Ë¾ÆµÓ½Ã´Ù.

lpFlags ¸Å°³º¯¼ö´Â WSARecv ÇÔ¼ö°¡ µ¿ÀÛÇÏ°ÔµÉ ±¸Ã¼ÀûÀÎ ÀÛ¾÷¿¡ ´ëÇؼ­ ¸í½ÃÇϴµ¥ »ç¿ëÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù. ÀÌ °ªÀº ¾Æ·¡¿¡ ³ª¿­µÈ °ªÀ» OR ¿¬»êÇؼ­ ¼³Á¤ÇÏ°Ô µË´Ï´Ù. Áï, ÀÌ ÇÔ¼ö°¡ µ¿ÀÛÇÏ´Â ³»¿ëÀº ¼ÒÄϿɼǰú lpFlags ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ °áÁ¤µÈ´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù.

Value Meaning
MSG_PEEK µé¾î¿À´Â µ¥ÀÌÅ͸¦ »ì¦ ¿³º¸±â¸¸ ÇÕ´Ï´Ù. µ¥ÀÌÅÍ´Â ÇÔ¼ö¿¡¼­ ÁöÁ¤ÇÑ ¹öÆÛ·Î Ä«ÇǵÇÁö¸¸, ÀԷ ť ·ÎºÎÅÍ Á¦°ÅµÇÁö´Â ¾Ê½À´Ï´Ù. ÀÌ Ç÷¡±×´Â ³Í-¿À¹ö·¦ ¼ÒÄÏ¿¡¼­¸¸ °¡´ÉÇÕ´Ï´Ù.
MSG_OOB out-of-band µ¥ÀÌÅ͸¦ ó¸®Çϱâ À§ÇØ »ç¿ëµË´Ï´Ù.
MSG_PARTIAL ÀÌ Ç÷¡±×´Â ¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏ¿¡¼­¸¸ °¡´ÉÇÕ´Ï´Ù. ¼ö½Å¹ÞÀº µ¥ÀÌÅÍ´Â Àü¼ÛÇÑ µ¥ÀÌÅÍÀÇ ÀϺκÐÀÔ´Ï´Ù. ÀÐÁö ¾Ê°í ³²¾ÆÀÖ´Â ¸Þ½ÃÁöÀÇ ÀϺκÐÀº ¹Ù·Î µÚ µû¶ó¿À´Â ¼ö½Å ¿¬»ê¿¡¼­ ÀÐÇôÁú °ÍÀÔ´Ï´Ù. ÀÔ·Â ¸Å°³º¯¼ö·Î »ç¿ëµÉ ¶§, ¼ö½Å¿¬»êÀÌ ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ¿¡ ÀÇÇؼ­ ¸Þ½ÃÁöÀÇ ÀϺκи¸ÀÌ ¼ö½ÅµÇ¾ú´Ù ÇÏ´õ¶óµµ ¼ö½Å ¿¬»êÀÌ ¿Ï·áÇß´Ù ¶ó´Â °ÍÀ» ¾Ë·ÁÁÖ°Ô µË´Ï´Ù.

¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏ¿¡¼­, MSG_PARTIAL Ç÷¡±× ºñÆ®´Â, ¸Þ½ÃÁöÁß ÀϺκÐÀÌ ¼ö½Å µÇ¾ú´Ù¸é, lpFlags ¸Å°³º¯¼ö¿¡ Ç÷¡±×°¡ ¼³Á¤µÇ°Ô µË´Ï´Ù. ¸¸¾à ¿Ï·á ¸Þ½ÃÁö°¡ ¼ö½ÅµÇ¾ú´Ù¸é, MSG_PARTIAL Àº lpFlags ¿¡¼­ »ç¶óÁö°Ô µË´Ï´Ù. ÀÛ¾÷ÀÇ ¿Ï·á°¡ Àá½Ã µÚ·Î ¹Ì·ç¾îÁø °æ¿ì, lpFlags ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ Æ÷ÀÎÆ®µÈ °ªÀº ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê½À´Ï´Ù. ÀÛ¾÷ÀÇ ¿Ï·á°¡ ¾Ë·ÁÁ³À» ¶§, ¾îÇø®ÄÉÀ̼ÇÀº WSAGetOverlappedResult ÇÔ¼ö¸¦ È£ÃâÇؼ­ ÀÛ¾÷ÀÇ °á°ú¸¦ ¾ò¾î³¾ ¼ö ÀÖ°í, lpdwFlags ¸Å°³º¯¼ö·Î ÀÛ¾÷¿Ï·á ¾Ë¸² Ç÷¡±×¸¦ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

Overlapped socket I/O

¿À¹ö·¦ ¿¬»êÀÌ ¹Ù·Î ¿Ï·á µÇ¾ú´Ù¸é, WSARecv ÇÔ¼ö´Â 0 °ªÀ» ¹ÝȯÇÏ°í, lpNumberOfBytesRecvd ¸Å°³º¯¼ö´Â Àо ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ °¡Áö°í ¾÷µ¥ÀÌÆ® µË´Ï´Ù. ±×¸®°í, Ç÷¡±× ºñÆ®´Â lpFlags ¸Å°³º¯¼ö·Î ¶ÇÇÑ ¾÷µ¥ÀÌÆ® µË´Ï´Ù. ¿À¹ö·¦ ¿¬»êÀÌ ¼º°øÀûÀ¸·Î ½ÃÀ۵ǰí, ³ªÁß¿¡ ÀÛ¾÷ÀÌ ¿Ï·áµÉ ¿¹Á¤À̶ó¸é, WSARecv ÇÔ¼ö´Â SOCKET_ERROR¸¦ ¹ÝȯÇÏ°í, WSA_IO_PENDING ¿¡·¯Äڵ带 ¹ß»ýÇÏ°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡, lpNumberOfBytesRecvd ¸Å°³º¯¼ö¿Í lpFlags ¸Å°³º¯¼ö´Â ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê½À´Ï´Ù. ³ªÁß¿¡ ¿À¹ö·¦ ¿¬»êÀÌ ¿Ï·á µÇ¾úÀ» ¶§, ¼ö½Å¹ÞÀº µ¥ÀÌÅÍÀÇ Å©±â´Â ¿Ï·á·çƾÀÇ cbTransferred ¸Å°³º¯¼ö³ª WSAGetOverlappedResult ÇÔ¼öÀÇ lpcbTransfer ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ ¾Ë·ÁÁö°Ô µË´Ï´Ù. Ç÷¡±× °ªÀº WSAGetOverlappedResult ÇÔ¼öÀÇ lpdwFlags ¸Å°³º¯¼ö¸¦ °Ë»çÇؼ­ ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù.

WSARecv ÇÔ¼ö´Â ÀÌÀü¿¡ È£ÃâµÇ¾ú´ø WSARecv, WSARecvFrom, WSASend, WSASendTo ÇÔ¼öÀÇ ¿Ï·á ·çƾÀÇ ³»ºÎ¿¡¼­ È£ÃâµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °ÍÀÌ °¡´É ÇÔÀ¸·Î½á ¼±Á¡Çü È帧À¸·Î½á ½Ã°£¿¡ ¹Î°¨ÇÑ µ¥ÀÌÅÍÀÇ Àü¼ÛÀº °¡´ÉÇÏ°Ô µË´Ï´Ù.

lpOverlapped ¸Å°³º¯¼ö´Â ¿À¹ö·¦ ¿¬»êÀÌ ÀϾ°í ÀÖ´Â µ¿¾È ±×°ªÀ» ¿Ã¹Ù¸£°Ô À¯ÁöÇØ¾ß ÇÕ´Ï´Ù. ¸¸¾à ¿©·¯°³ÀÇ I/O¿¬»êÀÌ µ¿½Ã¿¡ ¹ß»ýµÈ´Ù¸é, °¢°¢ÀÇ ¿¬»êÀº °¢±â ºÐ¸®µÈ WSAOVERLAPPED ±¸Á¶Ã¼¸¦ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù.

¸¸¾à lpCompletionRoutine ¸Å°³º¯¼ö°¡ NULL À̶ó¸é, lpOverlapped ÀÇ hEvent Çʵå´Â ¿À¹ö·¦ ¿¬»êÀÌ ¿Ï·áµÇ¾úÀ» ¶§ ½ÅÈ£¸¦ ¹Þ°Ô µË´Ï´Ù. (¹°·Ð hEvent Çʵå´Â Á¦´ë·Î µÈ À̺¥Æ® °´Ã¼¿©¾ß ÇÏ°ÚÁÒ?) ¾îÇø®ÄÉÀ̼ÇÀº À̺¥Æ®°´Ã¼·Î ´ë±âÇϰųª Æú¸µ Çϱâ À§Çؼ­ WSAWaitForMultipleEvents ÇÔ¼ö³ª WSAGetOverlappedResult ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¸¸¾à lpCompletionRoutine ¸Å°³º¯¼ö°¡ NULLÀÌ ¾Æ´Ï¶ó¸é, hEvent Çʵå´Â ¹«½ÃµÇ°í, ¾îÇø®ÄÉÀ̼ÇÀº ¿Ï·á·çƾÀ» À§Çؼ­ È帧Á¤º¸¸¦ ³ÑÁÙ ¼ö ÀÖ½À´Ï´Ù.

lpCompletionRoutine ¸Å°³º¯¼ö¸¦ NULLÀÌ ¾Æ´Ñ °ªÀ¸·Î ³Ñ°ÜÁÖ°í, ³ªÁß¿¡ °°Àº ¿À¹ö·¦ I/O ¿äûÀ» À§ÇØ WSAGetOverlappedResult ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÄÝ·¯´Â WSAGetOverlappedResult ÇÔ¼öÀÇ °á°ú¸¦ TRUE·Î ÇϱâÀ§ÇØ fWait ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì hEvent ÇʵåÀÇ »ç¿ë¹ýÀº Á¤ÀǵǾî ÀÖÁö ¾Ê½À´Ï´Ù. ±×¸®°í, hEvent À̺¥Æ® °´Ã¼¿¡ ´ëÇؼ­ ´ë±âÇÏ·Á°í ÇÏ´Â ½Ãµµ´Â ¿¹±âÁö ¾ÊÀº °á°ú¸¦ ÃÊ·¡ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

¿Ï·á·çƾ(completion routine)Àº Win32 ÆÄÀÏ I/O¿¡¼­ ±ÔÁ¤µÈ °Í°ú °°Àº ¹æ½ÄÀ» µû¸¨´Ï´Ù. ¿Ï·á·çƾÀº WSAWaitForMultipleEvents ÇÔ¼ö°¡ fAlertable ¸Å°³º¯¼ö¸¦ TRUE·Î ÇÏ¿© È£ÃâµÉ ¶§ ¹ß»ýµÇ´Â °Í°ú °°ÀÌ ¾²·¹µåÀÇ ´ë±â»óŸ¦ °¨ÁöÇÒ ¼ö ÀÖ´Â(alertable) »óÅ°¡ µÉ ¶§±îÁö È£ÃâµÇÁö ¾Ê½À´Ï´Ù.

¿Ï·á·çƾÀÇ ÇÁ·ÎÅäŸÀÔÀº ¾Æ·¡¿Í °°½À´Ï´Ù.

void CALLBACK CompletionROUTINE(
        IN DWORD   
dwError,
        IN DWORD   
cbTransferred,
        IN LPWSAOVERLAPPED   
lpOverlapped,
        IN DWORD   
dwFlags
);

CompletionRoutine ÇÔ¼ö´Â ¾îÇø®ÄÉÀÌ¼Ç ÁöÁ¤ ¶Ç´Â ¶óÀ̺귯¸® ÁöÁ¤ ÇÔ¼ö À̸§À» °¡Áý´Ï´Ù. dwError ¸Å°³º¯¼ö´Â lpOverlapped ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ ³ªÅ¸³½ ¿À¹ö·¦ ¿¬»ê¿¡ ´ëÇÑ ¿Ï·á »óŸ¦ ¸í½ÃÇÕ´Ï´Ù. cbTransferred ¸Å°³º¯¼ö´Â Àü¼ÛÇÑ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¸í½ÃÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î flag °ªÀº Á¤ÀǵǾî ÀÖÁö ¾Ê°í, dwFlags ´Â 0À» »ç¿ëÇÕ´Ï´Ù.

 

Return Values

¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê°í, Àü¼Û¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÇ¾ú´Ù¸é, WSARecv ÇÔ¼ö´Â 0À» ¹Ýȯ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ ¿Ï·á·çƾÀº È£Ãâ¾²·¹µå°¡ ¹ÝÀÀÇÒ ¼ö ÀÖ´Â(alertable) »óÅ·ΠȣÃâµÇ±â À§ÇÑ Áغñ¸¦ ÀÌ¹Ì °°Ãß¾ú´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù. ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì SOCKET_ERROR °ªÀÌ ¹Ýȯ µË´Ï´Ù. ±×¸®°í, WSAGetLastError ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ ƯÁ¤ÇÑ ¿¡·¯Äڵ带 ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù.

 

Error Codes

WSANOTINITIALISED

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

WSAENETDOWN

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

WSAENOTCONN ÁöÁ¤µÈ ¼ÒÄÏÀÌ Á¢¼ÓµÈ ¼ÒÄÏÀÌ ¾Æ´Õ´Ï´Ù.
WSAEINTR ºí·°Å· À©¼Ó v1.1 ÀÌ WSACancelBlockingCall ÇÔ¼ö¿¡¼­ Ãë¼ÒµÇ¾ú½À´Ï´Ù
WSAEINPROGRESS

ºí·°Å· À©¼Ó v1.1 ÀÌ ÇöÀç ÁøÇà ÁßÀÔ´Ï´Ù.

WSAENETRESET ÀÛ¾÷ÀÌ ÁøÇàµÇ°í ÀÖ´Â µµÁß¿¡ ¿¡·¯»óȲÀÌ °ËÃâµÇ¾î¼­ Á¢¼ÓÀÌ ÇØÁ¦ µÇ¾ú½À´Ï´Ù.
WSAENOTSOCK ÁöÁ¤ÇÑ ¼ÒÄÏ ±â¼úÀÚ°¡ ¼ÒÄϱâ¼úÀÚ°¡ ¾Æ´Õ´Ï´Ù.
WSAEFAULT lpBuffer ¸Å°³º¯¼ö°¡ ¿Ã¹Ù¸¥ ¸Þ¸ð¸® ¾îµå·¹½º¸¦ °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù.
WSAEOPNOTSUPP MSG_OOB Ç÷¡±×°¡ ÁöÁ¤µÇ¾úÀ¸³ª, ¼ÒÄÏÀÌ SOCK_STREAM °ú °°Àº ŸÀÔÀÇ ½ºÆ®¸² ÇüÅÂÀÇ ¼ÒÄÏÀÌ ¾Æ´Ñ °æ¿ì À̰ųª, ¼ÒÄÏÀÌ out-of-band µ¥ÀÌÅ͸¦ Áö¿øÇÏÁö ¾Ê´Â ÇüÅÂÀÇ ¼ÒÄÏÀÔ´Ï´Ù. ±×¸®°í, MSG_PARTIAL ÇüÅ°¡ Áö¿øµÇÁö ¾Ê°Å³ª, ¼ÒÄÏÀÌ ´Ü¹æÇâ À̾ µ¥ÀÌÅÍ ¼ö½Å ¿¬»ê¸¸À» Áö¿øÇÏ´Â ÇüÅÂÀÔ´Ï´Ù.
WSAESHUTDOWN ¼ÒÄÏÀÌ ¼Ë´Ù¿î µÇ¾ú½À´Ï´Ù. ¼ÒÄÏ¿¡ ´ëÇؼ­ shutdown ÇÔ¼ö¸¦ È£ÃâÇÑ ÈÄ¿¡´Â WSARecv ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
WSAEWOULDBLOCK ¿À¹ö·¦ ¼ÒÄÏ      : ³Ê¹«¸¹Àº ¿À¹ö·¦ I/O°¡ ¹ß»ýÇß½À´Ï´Ù.
³Í-¿À¹ö·¦ ¼ÒÄÏ : ¼ÒÄÏÀÌ ºñµ¿±â ¼ÒÄÏÀÏ °æ¿ì Àü¼Û ¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÉ ¼ö ¾ø½À´Ï´Ù. ( ¾ðÁ¨°¡´Â ¿Ï·á°¡ µÉ °ÍÀ̹ǷΠȮ½ÇÇÑ ¿¡·¯»óȲÀ̶ó°í º¼ ¼ö ¾øÁÒ.)
WSAEMSGSIZE ¸Þ½ÃÁö°¡ ÁöÁ¤µÈ ¹öÆÛ¿¡ µé¾î°¡±â¿¡ ³Ê¹« Å®´Ï´Ù. ±×¸®°í, ½Å·Ú¼º¾øÀº ÇÁ·ÎÄÝÀÇ °æ¿ì¿¡, ¹öÆÛ¿¡ ÀúÀåµÇÁö ¾ÊÀº ³ª¸ÓÁö µ¥ÀÌÅÍ´Â ÀÒ¾î ¹ö¸®°Ô µË´Ï´Ù.
WSAEINVAL ¼ÒÄÏÀÌ ¹ÙÀÎµå µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù.
WSAECONNABORTED °¡»ó ¿¬°á¸ÁÀÌ Å¸ÀӾƿôÀ̳ª ±×¹ÛÀÇ ¿¡·¯·Î ²÷°Ü¹ö·È½À´Ï´Ù.
WSAECONNRESET °¡»ó ¿¬°á¸ÁÀÌ ¿ø°ÝÁö »ó´ë¹æ¿¡ ÀÇÇؼ­ ¸®¼Â µÇ¾ú½À´Ï´Ù.
WSAEDISCON ¼ÒÄÏ s°¡ ¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏÀÌ°í, °¡»ó ¿¬°á¸ÁÀÌ ¿ø°ÝÁö¿¡ ÀÇÇؼ­ ¿ì¾ÆÇÏ°Ô Á¾·á µÇ¾ú½À´Ï´Ù.
WSA_IO_PENDING ¿À¹ö·¦ ¿¬»êÀÌ ¼º°øÀûÀ¸·Î ½ÃÀ۵Ǿú°í, ÀÛ¾÷Àº Áö±Ý ¿Ï·áµÉ ¼ö ¾øÁö¸¸, °ð ¿Ï·áµÉ °ÍÀÔ´Ï´Ù.
WSA_OPERATION_ABORTED ¿À¹ö·¦ ¿¬»êÀÌ ¼ÒÄÏÀÇ Á¾·á ¶§¹®¿¡ Ãë¼Ò µÇ¾ú½À´Ï´Ù.

 

QuickInfo

Windows NT : »ç¿ë°¡´É
Windows : »ç¿ë°¡´É
Windows CE : Áö¿øµÇÁö ¾ÊÀ½
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, WSACloseEvent, WSACreateEvent, WSAGetOverlappedResult, WSASocket, WSAWaitForMultipleEvents