WSARecvFrom

WSARecvFrom ÇÔ¼ö´Â µ¥ÀÌÅͱ׷¥À» ¼ö½ÅÇÏ°í, µ¥ÀÌÅ͸¦ º¸³»´Â °÷(source) ÀÇ ¾îµå·¹½º¸¦ ÀúÀå(store)ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

int WSARecvFrom (
        SOCKET   
s,
        LPWSABUF   
lpBuffers,
        DWORD   
dwBufferCount,
        LPDWORD   
lpNumberOfBytesRecvd,
        LPDWORD  
 lpFlags,
        struct sockaddr FAR *  
 lpFrom,
        LPINT  
 lpFromlen,
        LPWSAOVERLAPPED   
lpOverlapped,
        LPWSAOVERLAPPED_COMPLETION_ROUTINE   
lpCompletionROUTINE
);

 

Parameters

s
[ÀÔ·Â] ÀÛ¾÷ ´ë»ó ¼ÒÄÏ ±â¼úÀÚ

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

dwBufferCount
[ÀÔ·Â] lpBuffers ¹è¿­¿¡ ÀÖ´Â
WSABUF ¿¤¸®¸ÕÆ®ÀÇ °³¼ö

lpNumberOfBytesRecvd
[Ãâ·Â] ÇÔ¼öÀÇ È£Ãâ ÈÄ¿¡ ¼ö½Å¿¬»êÀÌ ¹Ù·Î Á¾·áµÉ °æ¿ì, ¼ö½ÅµÈ ¹ÙÀÌÆ®ÀÇ ¼öÄ¡¸¦ Æ÷ÀÎÆ® ÇÕ´Ï´Ù.

lpFlags
[ÀÔ·Â/Ãâ·Â] Ç÷¡±×¸¦ À§ÇÑ Æ÷ÀÎÅÍ

lpFrom
[Ãâ·Â] µ¥ÀÌÅ͸¦ º¸³½ Ãâ¹ßÁö ¾îµå·¹½º¸¦ Æ÷ÀÎÆ® ÇϱâÀ§ÇÑ
SOCKADDR ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ

lpFromlen
[ÀÔ·Â/Ãâ·Â] lpFrom ¸Å°³º¯¼ö°¡ ÁöÁ¤µÇ¾úÀ» ¶§¸¸ »ç¿ëµÇ´Â ¸Å°³º¯¼ö·Î lpFromÀÇ Å©±â¸¦ À§ÇÑ Æ÷ÀÎÅÍ

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

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

 

Remarks

WSARecvFrom ÇÔ¼ö´Â Ç¥ÁØ recvfrom ÇÔ¼ö¿Í ºñ±³ÇÒ ¶§ ¾Æ·¡ÀÇ 3°¡Áö ¸é¿¡¼­ º¼ ¶§ ´õ ¸¹Àº ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.

1. ¿À¹ö·¦ ¼ö½Å ¿¬»êÀ» ¼öÇàÇϱâ À§Çؼ­ ¿À¹ö·¦ ¼ÒÄÏ°ú ¿¬µ¿ÇÏ¿© »ç¿ëµË´Ï´Ù.

2. ÀÌ ÇÔ¼ö´Â ¼öÁý/ºÐ»ê ÇüÅÂÀÇ I/O¸¦ °¡´ÉÇÏ°Ô ÇϱâÀ§ÇÏ¿© ¿©·¯°³ÀÇ ¼ö½Å¹öÆÛ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

3. lpFlags ¸Å°³º¯¼ö´Â ÀԷ¿ë°ú Ãâ·Â¿ëÀÇ ¸Å°³º¯¼ö·Î »ç¿ëµÇ¾î, MSG_PARTIAL ÀÇ »óŸ¦ Ãâ·Â½Ã °¨ÁöÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÇÏÁö¸¸, MSG_PARTIAL Ç÷¡±× ºñÆ®´Â ¸ðµç ÇÁ·ÎÅäÄÝ¿¡ ´ëÇؼ­ Áö¿øµÇÁö ¾Ê´Â´Ù´ÂÁ¡! ²À ¸í½ÉÇϽñ⠹ٶø´Ï´Ù.

WSARecvFrom ÇÔ¼ö´Â º»ÁúÀûÀ¸·Î ¸Å°³º¯¼ö s ¿¡ ÁöÁ¤µÈ ºñÁ¢¼Ó ÁöÇâÇü ¼ÒÄÏ(SOCK_DGRAM)¿¡ »ç¿ëµË´Ï´Ù. ¼ÒÄÏÀÇ ·ÎÄà ¾îµå·¹½º´Â È®½ÇÈ÷ ¾Ë ¼ö ÀÖ´Â °ÍÀÌ¿©¾ß Çϴµ¥¿ä. ¼­¹ö ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â È®½ÇÇÑ ·ÎÄþîµå·¹½º¸¦ ¹ÙÀεù ÇϱâÀ§Çؼ­ bind ÇÔ¼ö¸¦ »ç¿ëÇؼ­ È£ÃâÇÕ´Ï´Ù. ÀÌ·¯°Ô ¸í½ÃÀûÀ¸·Î bind ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ½ÄÀº Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¿¡¼­´Â ¹«¿ëÁö¹°ÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·Î Ŭ¶óÀ̾ðÆ® ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â sendto, WSASendTo, ¶Ç´Â WSAJoinLeaf ÇÔ¼ö¸¦ »ç¿ëÇؼ­ ¹¬½ÃÀûÀ¸·Î ·ÎÄþîµå·¹½º ÁöÁ¤ÇÏ°Ô µË´Ï´Ù.

¿À¹ö·¦ ¼ÒÄÏ¿¡¼­, ÀÌ ÇÔ¼ö´Â ¼ÒÄÏÀ¸·Î µé¾î¿À´Â µ¥ÀÌÅ͸¦ ¹öÆÛ¸µ ÇϱâÀ§Çؼ­ ÇÑ °³ ¶Ç´Â ±× ÀÌ»óÀÇ ¹öÆÛ¸¦ »ç¿ë ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô µ¥ÀÌÅ͸¦ ¹öÆÛ¸µ ÇÑ ¼ö¿¡ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ÁöÁ¤µÈ ÀÛ¾÷¿Ï·á ·çƾ(or ½ÅÈ£)´Â ¹ß»ý µË´Ï´Ù. ¿©±â¼­ ¸»ÇÏ´Â ÀÛ¾÷¿Ï·á ·çƾ(or ½ÅÈ£)¶õ ¿Ï·áÇÔ¼ö(completion routine)³ª, À̺¥Æ® ¿ÀºêÁ§Æ®¸¦ ¸»ÇÏ´Â °Ì´Ï´Ù. ¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÇÁö ¾Ê´Â´Ù¸é, ¸¶Áö¸· ¿Ï·á »óÅ´ À§¿¡¼­ ¾ð±ÞÇÑ ¿Ï·á·çƾ(completion routine)À̳ª, WSAGetOverlappedResult ÇÔ¼ö¸¦ ÅëÇØ ¹ÝȯµË´Ï´Ù. ¶ÇÇÑ, lpFrom ¸Å°³º¯¼ö¿Í lpFromlen ¸Å°³º¯¼öÀÇ °ªÀº ÀÛ¾÷ÀÌ ¿Ï·áµÇ¾î ¿Ï·á ½ÅÈ£¸¦ ¹ÞÀ»¶§ ±îÁö ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê½À´Ï´Ù. ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â ÀÌ °ªµéÀÌ ¾÷µ¥ÀÌÆ® µÇ±â Àü¿¡ ÀÌ °ªµéÀ» °Çµå¸®¸é ¾È µË´Ï´Ù.

lpOverlapped ¿Í lpCompletionRoutine ¸Å°³º¯¼ö°¡ µÑ ´Ù NULL ÀÏ °æ¿ì, ÀÌ ÇÔ¼ö¿¡ »ç¿ëµÈ ¼ÒÄÏÀº ³Í-¿À¹ö·¦ ¼ÒÄÏÀ¸·Î °£ÁֵǾî 󸮵˴ϴÙ.

³Í-¿À¹ö·¦ ¼ÒÄÏ¿¡¼­ÀÇ ºí·ÏÅ· 󸮺κÐÀº WSARecv ÇÔ¼öÀÇ ±×°Í°ú °°½À´Ï´Ù. ±×¸®°í lpOverlapped ¿Í lpCompletionRoutine ¸Å°³º¯¼ö´Â ¹«½ÃµË´Ï´Ù. Æ®·£½ºÆ÷Æ®(°èÃþ)¿¡¼­ ÀÌ¹Ì ¼ö½ÅµÇ°í, ¹öÆÛ¸µµÈ µ¥ÀÌÅÍ´Â ÇÔ¼ö¿¡ ÁöÁ¤ÇÑ ¹öÆÛ·Î Ä«Çǵ˴ϴÙ. ¾Æ¹«·± µ¥ÀÌÅÍ°¡ µé¾î¿ÀÁö ¾ÊÀº »óÅ¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÇ¸é, ´Ù¸¥ µ¥ÀÌÅÍ°¡ µé¾î¿Ã ¶§ ±îÁö ÇÔ¼ö¸¦ ºí·Ï ÇÕ´Ï´Ù.

lpBuffers ¸Å°³º¯¼ö·Î ÁöÁ¤µÇ´Â WSABUF ¸Å°³º¯¼öÀÇ ¹è¿­Àº Àӽðø°£ÀÔ´Ï´Ù. ¿À¹ö·¦ ¹æ½ÄÀ¸·Î ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ¾ú´Ù¸é, ÇÔ¼ö°¡ ¹ÝȯÇϱâÀü¿¡ WSABUF ±¸Á¶Ã¼¸¦ ĸÃÄÇÏ´Â ÀÏÀº ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õÀÇ ¸òÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾îÇø®ÄÉÀ̼ÇÀº ½ºÅñâ¹Ý(½±°Ô ¸»Çؼ­ ¹è¿­ÀÌÁÒ)À¸·Î WSABUF ¹è¿­À» »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.

ºñÁ¢¼Ó ÁöÇâÇü ¼ÒÄÏŸÀÔ¿¡¼­, µ¥ÀÌÅ͸¦ º¸³»´Â »ó´ë¹æÀÇ ¾îµå·¹½º´Â lpFrom ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ ÁöÁ¤µÈ ¹öÆÛ·Î Ä«Çǵ˴ϴÙ. lpFromlen ¸Å°³º¯¼ö´Â ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ³Ñ°ÜÁÖ´Â lpFrom ÀÇ Å©±â¸¦ ÁöÁ¤ÇØ ÁÖ°í, ÀÌ ÇÔ¼öÀÇ ¿¬»êÀÌ ¿Ï·á µÇ¾úÀ» ¶§ lpFrom ¸Å°³º¯¼ö·Î ½ÇÁ¦·Î ÀúÀåµÈ µ¥ÀÌÅÍÀÇ Å©±â¸¦ Æ÷ÀÎÆ® ÇÏ°Ô µË´Ï´Ù. ¿À¹ö·¦ ¼ÒÄÏ¿¡¼­ lpFrom °ú lpFromlen ¸Å°³º¯¼ö´Â ¿À¹ö·¦ I/O °¡ ¿Ï·áµÉ ¶§ ±îÁö ¾÷µ¥ÀÌÆ® µÇ¾î¼­´Â Àý´ë·Î ¾È µË´Ï´Ù. ±×·¯¹Ç·Î, ÀÌ ¸Å°³º¯¼ö·Î Æ÷ÀÎÆ®µÈ ¸Þ¸ð¸®´Â ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ¿¡¼­ »ç¿ä°¡´ÉÇϵµ·Ï ³²°ÜµÎ¾î¾ß Çϸé, ¾îÇø®ÄÉÀÌ¼Ç ½ºÅà ÇÁ·¹ÀÓ¿¡ ÇÒ´çÇÏÁö ¸»¾Æ¾ß ÇÕ´Ï´Ù. °á±¹ µ¿ÀûÇÒ´ç Ç϶ó´Â ¸»ÀÌ°ÚÁÒ. lpFrom °ú lpFromlen ¸Å°³º¯¼ö´Â Á¢¼ÓÁöÇâÇü ¼ÒÄÏ¿¡¼­´Â ¹«½ÃµË´Ï´Ù.

SOCK_STREAM °ú °°Àº ¹ÙÀÌÆ® ½ºÆ®¸² ¼ÒÄÏÀÇ °æ¿ì, µé¾î¿À´Â µ¥ÀÌÅÍ´Â ¹öÆÛ°¡ °¡µæ Âû ¶§ ±îÁö³ª, Á¢¼ÓÀÌ ²÷±æ ¶§±îÁö, ¾Æ´Ï¸é, ³»ºÎ¹öÆÛ µ¥ÀÌÅÍ(internally beffered data)¸¦ ´Ù ½á ¹ö¸± ¶§ ±îÁö ÁöÁ¤µÈ ¹öÆÛ¿¡ ä¿öÁö°Ô µË´Ï´Ù. ¿À¹ö·¦ ¼ÒÄÏ¿¡¼­ µé¾î¿À´Â µ¥ÀÌÅÍ°¡ ¸ðµç ¹öÆÛ¿¡ ä¿öÁöµç ä¿öÁöÁö ¾Êµç°£¿¡, ÀÛ¾÷ÀÌ ¿Ï·á µÇ¾ú´Ù´Â ¾Ë¸²Àº ¹ß»ýÇÕ´Ï´Ù. SOCK_DGRAM °ú °°Àº ¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏÀÇ °æ¿ì, µé¾î¿À´Â ¸Þ½ÃÁö´Â ÁöÁ¤µÈ ¹öÆÛÀÇ ÃÑ Å©±â¿¡ À̸£±â ±îÁö ÁöÁ¤µÈ ¹öÆÛ¿¡ ä¿öÁö°Ô µË´Ï´Ù. ±×¸®°í ¿À¹ö·¦ ¼ÒÄÏ¿¡ ´ëÇؼ­ ÀÛ¾÷ ¿Ï·á ¾Ë¸²Àº ¹ß»ýÇÏ°Ô µË´Ï´Ù. ¸¸¾à ¸Þ½ÃÁö°¡ ÁöÁ¤µÈ ¹öÆÛº¸´Ù ´õ Å©´Ù¸é, ¹öÆÛ¿£ µé¾î¿Â ¸Þ½ÃÁöÁß Ã³À½ºÎÅÍ ÁöÁ¤µÈ Å©±â¸¸Å­¸¸ÀÌ Ã¤¿öÁö°Ô µË´Ï´Ù.

MSG_PARTIAL ºÎºÐÀº ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ¸¦ ±â¹ÝÀ¸·Î Áö¿øµÇ´Â Ç÷¡±×ÀÔ´Ï´Ù. MSG_PARTIAL Ç÷¡±×´Â lpFlags ¿¡ ¼³Á¤µÇ°í, µÚ µû¶ó¿À´Â ¼ö½Å ¿¬»êÀº ¸Þ½ÃÁöÀÇ rest(Áß°£ºÎºÐ?)¸¦ ¾ò¾î³¾ °ÍÀÔ´Ï´Ù. ¸¸¾à MSG_PARTIAL ÀÌ Áö¿øµÇÁö ¾ÊÁö¸¸, ÇÁ·ÎÅäÄÝÀÌ ¹ÏÀ» ¸¸ÇÑ °ÍÀ̶ó¸é, WSARecvFrom ÇÔ¼ö´Â WSAEMSGSIZE ¿¡·¯¸¦ ¹ß»ý½ÃÅ°°í, ´õ Å« ¹öÆÛ¸¦ »ç¿ë¿©, µÚ µû¶ó¿À´Â ¼ö½Å ¿¬»êÀº ÀüüÀÇ ¸Þ½ÃÁö¸¦ ¾ò¾î³»´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿Í ´Ù¸¥ °æ¿ì(MSG_PARTIALÀ» Áö¿øÇÏÁö ¾Ê°í, ÇÁ·ÎÅäÄÝÀÌ ½Å·Ú¼ºÀÌ ¾ø´Â °æ¿ì)´Â ÃÊ°úµÈ µ¥ÀÌÅÍ´Â Àß·Á ¹ö¸®°Ô µË´Ï´Ù. ±×¸®°í, WSARecvFrom ÇÔ¼ö´Â WSAEMSGSIZE ¿¡·¯¸¦ ¹ß»ýÇÕ´Ï´Ù.

lpFlags ¸Å°³º¯¼ö´Â WSARecvFrom ÇÔ¼ö°¡ µ¿ÀÛÇÏ°ÔµÉ ±¸Ã¼ÀûÀÎ ÀÛ¾÷¿¡ ´ëÇؼ­ ¸í½ÃÇϴµ¥ »ç¿ëÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù. ÀÌ °ªÀº ¾Æ·¡¿¡ ³ª¿­µÈ °ªÀ» 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

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

WSARecvFrom ÇÔ¼ö´Â ÀÌÀü¿¡ È£ÃâµÇ¾ú´ø 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

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

 

Error Codes

WSANOTINITIALISED

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

WSAENETDOWN

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

WSAEFAULT lpBuffers, lpFlags, lpFrom, lpNumberOfBytesRecvd, lpFromlen, lpOverlapped, ¶Ç´Â lpCompletionRoutine ¸Å°³º¯¼ö°¡ Á¦´ë·ÎµÈ »ç¿ëÀÚ ¾îµå·¹½º °ø°£À» °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù : lpFrom ¹öÆÛ°¡ »ó´ë¹æ ¾îµå·¹½º¸¦ ´ã±â¿¡ ³Ê¹« ÀÛÀº °æ¿ì¿¡µµ ÀÌ ¿¡·¯Äڵ带 ¹ß»ýÇÕ´Ï´Ù.
WSAEINTR ºí·°Å· À©¼Ó v1.1 ÀÌ WSACancelBlockingCall ÇÔ¼ö¿¡¼­ Ãë¼ÒµÇ¾ú½À´Ï´Ù
WSAEINPROGRESS

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

WSAEINVAL ¼ÒÄÏÀÌ ¹ÙÀÌµå µÇÁö ¾Ê¾Ò½À´Ï´Ù.
WSAEISCONN ¼ÒÄÏÀÌ Á¢¼ÓµÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â Á¢¼ÓÁöÇâÇü ¼ÒÄÏÀÌ°Ç, ºñÁ¢¼Ó ÁöÇâ ¼ÒÄÏÀÌ°Ç Á¢¼ÓµÈ ¼ÒÄÏÀ» Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.
WSAENETRESET ÀÛ¾÷ÀÌ ÁøÇàµÇ°í ÀÖ´Â µµÁß¿¡ ¿¡·¯°¡ °ËÃâµÇ¾î Á¢¼ÓÀÌ ±úÁ®¹ö·È½À´Ï´Ù.
WSAENOTCONN ¼ÒÄÏÀÌ Á¢¼ÓµÇÁö ¾Ê¾Ò½À´Ï´Ù. ( Á¢¼Ó ÁöÇâÇü ¼ÒÄÏÀÏ °æ¿ì¸¸ )
ÄÀ~~~ ÀÌ°Ç ¶Ç ¹«½¼ ¼Ò¸®³Ä... WSAEISCONN ¿¡¼­´Â Á¢¼ÓµÈ ¼ÒÄÏÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù¸é¼­... ¤Ð¤Ð
WSAEOPNOTSUPP MSG_OOB Ç÷¡±×°¡ ÁöÁ¤µÇ¾úÀ¸³ª, ¼ÒÄÏÀÌ SOCK_STREAM °ú °°Àº ŸÀÔÀÇ ½ºÆ®¸² ÇüÅÂÀÇ ¼ÒÄÏÀÌ ¾Æ´Ñ °æ¿ì À̰ųª, ¼ÒÄÏÀÌ out-of-band µ¥ÀÌÅ͸¦ Áö¿øÇÏÁö ¾Ê´Â ÇüÅÂÀÇ ¼ÒÄÏÀÔ´Ï´Ù. ±×¸®°í, MSG_PARTIAL ÇüÅ°¡ Áö¿øµÇÁö ¾Ê°Å³ª, ¼ÒÄÏÀÌ ´Ü¹æÇâ À̾ µ¥ÀÌÅÍ ¼ö½Å ¿¬»ê¸¸À» Áö¿øÇÏ´Â ÇüÅÂÀÔ´Ï´Ù.
WSAESHUTDOWN ¼ÒÄÏÀÌ ¼Ë´Ù¿î µÇ¾ú½À´Ï´Ù. ¼ÒÄÏ¿¡ ´ëÇؼ­ shutdown ÇÔ¼ö¸¦ È£ÃâÇÑ ÈÄ¿¡´Â WSARecvFrom ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
WSAEWOULDBLOCK ¿À¹ö·¦ ¼ÒÄÏ      : ³Ê¹«¸¹Àº ¿À¹ö·¦ I/O°¡ ¹ß»ýÇß½À´Ï´Ù.
³Í-¿À¹ö·¦ ¼ÒÄÏ : ¼ÒÄÏÀÌ ºñµ¿±â ¼ÒÄÏÀÏ °æ¿ì Àü¼Û ¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÉ ¼ö ¾ø½À´Ï´Ù. ( ¾ðÁ¨°¡´Â ¿Ï·á°¡ µÉ °ÍÀ̹ǷΠȮ½ÇÇÑ ¿¡·¯»óȲÀ̶ó°í º¼ ¼ö ¾øÁÒ.)
WSAEMSGSIZE ¸Þ½ÃÁö°¡ ÁöÁ¤µÈ ¹öÆÛ¿¡ µé¾î°¡±â¿¡ ³Ê¹« Å®´Ï´Ù. ±×¸®°í, ½Å·Ú¼º¾øÀº ÇÁ·ÎÄÝÀÇ °æ¿ì¿¡, ¹öÆÛ¿¡ ÀúÀåµÇÁö ¾ÊÀº ³ª¸ÓÁö µ¥ÀÌÅÍ´Â ÀÒ¾î ¹ö¸®°Ô µË´Ï´Ù.
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