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
overview, WSACloseEvent, WSACreateEvent, WSAGetOverlappedResult, WSASocket, WSAWaitForMultipleEvents