WSASendTo

WSASendTo ÇÔ¼ö´Â ¿À¹ö·¦ I/O¸¦ »ç¿ëÇÏ¿© ÁöÁ¤µÈ ¸ñÀûÁö·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

int WSASendTo (
        SOCKET   
s,
        LPWSABUF   
lpBuffers,
        DWORD   
dwBufferCount,
        LPDWORD   
lpNumberOfBytesSent,
        DWORD   
dwFlags,
        const struct sockaddr FAR *  
 lpTo,
        int   
iToLen,
        LPWSAOVERLAPPED  
 lpOverlapped,
        LPWSAOVERLAPPED_COMPLETION_ROUTINE   
lpCompletionROUTINE
);

 

Parameters

s
[ÀÔ·Â] ´ë»ó ¼ÒÄÏ(Á¢¼ÓµÈ ¼ÒÄϵµ »ó°ü¾ø½À´Ï´Ù.)ÀÇ ±â¼úÀÚ.

lpBuffers
[ÀÔ·Â]
WSABUF ±¸Á¶Ã¼ÀÇ ¹è¿­¿¡ ´ëÇÑ Æ÷ÀÎÅÍ·Î, °¢°¢ÀÇ WSABUF ±¸Á¶Ã¼´Â µ¥ÀÌÅ͸¦ ´ãÀº ¹öÆÛ¿Í ¹öÆÛÀÇ ±æÀ̸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ¹è¿­°ø°£Àº Àü¼Û ÀÛ¾÷ÀÌ ³¡³¯ ¶§ ±îÁö ºñ¿öÁ®¼­´Â ¾ÊµË´Ï´Ù.

dwBufferCount
[ÀÔ·Â] lpBuffers ¹è¿­¿¡ ÀÖ´Â
WSABUF ±¸Á¶Ã¼ÀÇ °¹¼ö

lpNumberOfBytesSent
[Ãâ·Â] I/O ¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÈ °æ¿ì, ÀÌ ÇÔ¼öÀÇ È£Ãâ·Î Àü¼ÛµÈ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö¸¦ Æ÷ÀÎÆ® ÇÕ´Ï´Ù.

dwFlags
[ÀÔ·Â] ¾î¶°ÇÑ ¹æ½ÄÀ¸·Î ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ °ÇÁö ÁöÁ¤ÇÕ´Ï´Ù.

lpTo
[ÀÔ·Â] ¸ñÀûÁö ¼ÒÄÏÀÇ ¾îµå·¹½º¸¦ ÁöÁ¤ÇÏ´Â Ãß°¡ÀûÀÎ Æ÷ÀÎÅÍ

iToLen
[ÀÔ·Â] lpTo ¾îµå·¹½ºÀÇ Å©±â

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

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

 

Remarks

 WSASendTo ÇÔ¼ö´Â ±â´ÉÀûÀÎ µÎ°¡Áö Ãø¸é¿¡¼­ ±âº» sendto ÇÔ¼öº¸´Ù ´õ ¸¹Àº ±â´ÉÀ» Áö¿øÇÕ´Ï´Ù.

1. ¿À¹ö·¦ Àü¼Û ¿¬»êÀ» ¼öÇàÇϱâ À§ÇÏ¿© ¿À¹ö·¦ ¼ÒÄÏ°ú °áÇÕÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

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

WSASendTo ÇÔ¼ö´Â ÀϹÝÀûÀ¸·Î ºñÁ¢¼Ó ÁöÇâÇü ¼ÒÄÏ(¸Å°³º¯¼ö s ·Î ÁöÁ¤)À» »ç¿ëÇÏ¿© ÁöÁ¤µÈ »ó´ë¹æ ¼ÒÄÏ(¸Å°³º¯¼ö lpTo ·Î ÁöÁ¤)¿¡ ÇÑ °³ ¶Ç´Â ±× ÀÌ»óÀÇ ¹öÆÛ·Î µ¥ÀÌÅͱ׷¥À» Àü¼ÛÇÒ ¼ö ÀÖ½À´Ï´Ù. ºñÁ¢¼Ó¼ÒÄÏ(SOCK_DGRAM)ÀÌ ÀÌÀü¿¡ connect ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ Á¢¼ÓµÇ¾î ÀÖ¾ú´Ù ÇÏ´õ¶óµµ, lpTo ¸Å°³º¯¼ö´Â ƯÁ¤ÇÑ µ¥ÀÌÅͱ׷¥¿¡ ´ëÇؼ­ ÀÌÀü¿¡ ÁöÁ¤ÇÑ ¸ñÀûÁö ¾îµå·¹½º¸¦ ¹«½ÃÇÕ´Ï´Ù. Á¢¼ÓÁöÇâÇü ¼ÒÄÏÀÇ °æ¿ì lpTo ¿Í iToLen ¸Å°³º¯¼ö´Â ¹«½ÃµË´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ WSASendTo ÇÔ¼ö´Â WSASend ÇÔ¼ö¿Í µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÕ´Ï´Ù.

¿À¹ö·¦ ¼ÒÄÏ(WSASocket ÇÔ¼ö¸¦ WSA_FLAG_OVERLAPPED Ç÷¡±×¸¦ ½á¼­ »ý¼ºÇÑ ¼ÒÄÏ)Àº ¿À¹ö·¦ ÀÔ/Ãâ·ÂÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ Àü¼ÛÇÕ´Ï´Ù. ÇÏÁö¸¸, lpOverlapped ¿Í lpCompletetionRoutine µÎ ¸Å°³º¯¼ö°¡ NULL ÀÎ °æ¿ì´Â ¿À¹ö·¦ ÀÔ/Ãâ·ÂÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ Àü¼ÛÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì ¼ÒÄÏÀº ³Í-¿À¹ö·¦ ¼ÒÄÏÀ¸·Î °£ÁÖµÇ¾î µ¿ÀÛÇÏ°Ô µË´Ï´Ù. ÀÛ¾÷ ¿Ï·áÀÇ ¾Ë¸²(¿Ï·á·çƾÀÌ È£ÃâµÇ°Å³ª, À̺¥Æ® ¿ÀºêÁ§Æ®°¡ ¼ÂÆõǾ ¾Ë·ÁÁö°Ô µÊ)Àº ÇÔ¼öÀÇ È£Ãâ½Ã ¸Å°³º¯¼ö·Î Á¦°øµÈ ¹öÆÛ¸¦ Àü¼ÛÇϴµ¥ ´Ù »ç¿ëÇßÀ» °æ¿ì ¹ß»ýµË´Ï´Ù. Àü¼Û ¿¬»êÀÌ ¹Ù·Î ¿Ï·áµÇÁö ¸øÇÏ´Â °æ¿ì¶ó¸é, ¸¶Áö¸· ¿Ï·á »óÅ´ ¿Ï·á·çƾ(completion routine)À̳ª WSAGetOverlappedResult ÇÔ¼ö·Î ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù.

À§¿¡¼­µµ Àá½Ã ¼³¸íÇßÁö¸¸, lpOverlapped ¿Í lpCompletionRoutine ¸Å°³º¯¼ö µÎ´Ù NULL ÀÏ °æ¿ì, ÀÌ ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â ¼ÒÄÏÀº ³Í-¿À¹ö·¦ ¼ÒÄÏÀ¸·Î °£ÁÖµÇ¾î ´Ù·ç¾îÁý´Ï´Ù. ²À ¸í½ÉÇÏ°í ³Ñ¾î °¡ÀÚ±¸¿ä.

³Í-¿À¹ö·¦ ¼ÒÄÏ¿¡¼­ ÀÌÇÔ¼ö¸¦ »ç¿ëÇÒ °æ¿ì(Áï, ù ¹ø° ¸Å°³º¯¼ö·Î ³Í-¿À¹ö·¦ ¼ÒÄÏÀ» ³Ñ±ä´Ù´Â ¾ê±é´Ï´Ù) ¸¶Áö¸· µÎ ¸Å°³º¯¼ö(lpOverlapped, lpCompletionRoutine)Àº ¹«½ÃµÇ°í, WSASendTo ÇÔ¼ö´Â send ÇÔ¼ö¿Í °°ÀÌ Ã³¸®µÇ°Ô µË´Ï´Ù. µ¥ÀÌÅÍ´Â °Ç³×ÁØ ¹öÆ۷κÎÅÍ Àü¼Û¹öÆÛ·Î Ä«ÇÇµÇ°Ô µÇ´Âµ¥, ¸¸¾à ¼ÒÄÏÀÌ ºñµ¿±â ½ºÆ®¸² ¼ÒÄÏÀÏ °æ¿ì Àü¼Û¹öÆÛÀÇ °ø°£ÀÌ ºÎÁ·ÇÏ°Ô µÉ ¼ö µµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ ³Ñ°ÜÁØ µ¥ÀÌÅÍÀÇ ÀϺκи¸ Àü¼ÛÇÏ°Ô µÇ´Âµ¥, °á±¹ ÀÌ ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â °ªµµ ³Ñ°ÜÁØ Àüü µ¥ÀÌÅÍ¿¡¼­ Àü¼ÛÇϴµ¥ »ç¿ëµÈ ÀϺκÐÀÇ µ¥ÀÌÅÍÀÇ ¼ö ¸¸À» ¹Ýȯ ÇÏ°Ô µË´Ï´Ù. ÇÏÁö¸¸, ºí·ÏÅ· ¼ÒÄÏ¿¡¼­´Â ²Ë Â÷ÀÖ´Â Àü¼Û¹öÆÛ°¡ ´Ù ¼ÒºñµÉ ¶§ ±îÁö ºí·Ï ÇÏ°Ô µË´Ï´Ù.

lpBuffers ¸Å°³º¯¼ö·Î ³ªÅ¸³»¾îÁö´Â WSABUF ±¸Á¶Ã¼ÀÇ ¹è¿­Àº ÀϽÃÀû(ÀÓ½ÃÀû)ÀÔ´Ï´Ù. ¸¸¾à ÀÌ ÇÔ¼öÀÇ ¿¬»êÀÌ ¿À¹ö·¦ À¸·Î 󸮵ȴٸé, ÇÔ¼ö°¡ ¸®ÅϵDZâ Àü¿¡ ÀÌ ¹è¿­(WSABUF ¹è¿­)À» ĸÃÄ ÇØ ³õ´ÂÀÏÀº ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ°¡ ¾Ë¾Æ¼­ ÇØÁÝ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î ³»ºÎ°¡ ±¸ÇöµÇ±â ¶§¹®¿¡, ¾îÇø®ÄÉÀ̼ÇÀº ½ºÅÃÇüÅÂÀÎ WSABUF ¹è¿­·Î Àü¼ÛÇÒ µ¥ÀÌÅ͸¦ ³Ñ°ÜÁÙ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

¸Þ½ÃÁö ÁöÇâÇü ¼ÒÄÏ(SOCK_DGRAM)ÀÇ °æ¿ì Àü¼ÛÇÏ´Â µ¥ÀÌÅͱ׷¥ÀÇ Å©±â°¡ Áö¿øÇÏ´Â ÃÖ´ë Å©±â¿¡¼­ ¹þ¾î³ªÁö ¾Êµµ·Ï ½Å°æÀ» ½á¾ß ÇÕ´Ï´Ù. ¼ÒÄÏÀÌ Áö¿øÇÏ´Â µ¥ÀÌÅͱ׷¥ÀÇ ÃÖ´ëÅ©±â´Â SO_MAX_MSG_SIZE ÀÇ °ªÀ¸·Î ¾ò¾î³¾ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à Àü¼ÛÇÏ·Á´Â µ¥ÀÌÅÍ°¡ ³Ê¹« Å©´Ù¸é, WSAEMSGSIZE¶ó´Â ¿¡·¯°ªÀÌ ¸®Å쵃 °ÍÀÌ°í, Àü¼ÛÀ» ÀÌ·ç¾îÁöÁö ¾Ê°Ô µË´Ï´Ù.

WSASendTo ÇÔ¼ö¸¦ ¼º°øÀûÀ¸·Î È£ÃâÇß´Ù°í, µ¥ÀÌÅÍ°¡ ¼º°øÀûÀ¸·Î Àü¼ÛµÇ¾ú´Ù´Â º¸ÀåÀº ¾ø½À´Ï´Ù.

dwFlags ¸Å°³º¯¼ö´Â ¼ÒÄÏ¿¡ ÁöÁ¤µÈ ¿É¼Ç¿Ü¿¡ ÇÔ¼öÀÇ È£ÃâÀÌ ¼öÇàÇÒ °ÍÀ» ÁöÁ¤Çϴµ¥ »ç¿ëµË´Ï´Ù. Áï, ÀÌ ÇÔ¼ö°¡ ¾î¶°ÇÑ ÀÛ¾÷À» ÇÒ °ÍÀÎÁö´Â ¼ÒÄϿɼǰú dwFlags ¸Å°³º¯¼ö¿¡ ÀÇÇؼ­ °áÁ¤µË´Ï´Ù. dwFlags ¸Å°³º¯¼ö·Î ³Ñ°ÜÁÙ °ªÀº ¾Æ·¡¿¡ Á¦½ÃµÈ °ªµéÀ» OR ¿¬»êÇؼ­ ±¸¼ºµÈ °ªÀ» »ç¿ëÇÕ´Ï´Ù.

Value Meaning
MSG_DONTROUTE µ¥ÀÌÅÍ°¡ ¶ó¿ìÆõÇÁö ¾Êµµ·Ï ÇϱâÀ§ÇØ ¸í½ÃÇÕ´Ï´Ù. À©µµÁî ¼ÒÄÏ ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ´Â ÀÌ Ç÷¡±×¸¦ ¹«½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
MSG_OOB out-of-band µ¥ÀÌÅ͸¦ Àü¼ÛÇÕ´Ï´Ù. (SOCK_STREAM °ú °°Àº ¼ÒÄÏ¿¡ »ç¿ë)
MSG_PARTIAL lpBuffers ¸Å°³º¯¼ö°¡ ´ÜÁö ºÎºÐ ¸Þ½ÃÁö(partial message) ¸¸À» ´Ù·é´Ù°í ¸í½ÃÇÕ´Ï´Ù. WSAEOPNOTSUPP ¿¡·¯ÄÚµå´Â ÀÌ·¯ÇÑ ºÎºÐ ¸Þ½ÃÁö Àü¼ÛÀ» Áö¿øÇÏÁö ¾Ê´Â Àü¼ÛÇüÅ¿¡¼­ MSG_PARTIAL Ç÷¡±×¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÑ´Ù´Â Á¡À» ¸í½É ÇØ µÓ½Ã´Ù.

 

Overlapped socket I/O

¿À¹ö·¦ ¿¬»êÀÌ ¹Ù·Î ¿Ï·á°¡ µÇ¾ú´Ù¸é, WSASendTo ÇÔ¼ö´Â 0°ªÀ» ¸®ÅÏÇÕ´Ï´Ù. ±×¸®°í, lpNumberOfBytesSent ¸Å°³º¯¼ö´Â Àü¼ÛµÈ ¹ÙÀÌÆ®ÀÇ ¼öÄ¡·Î ¾÷µ¥ÀÌÆ® µË´Ï´Ù. ¿À¹ö·¦ ¿¬»êÀÌ ¼º°øÀûÀ¸·Î ½ÃÀ۵ǾúÁö¸¸, ¿À¹ö·¦ ¿¬»êÀÌ ³ªÁß¿¡ ¿Ï·áµÉ °ÍÀ̶ó¸é, WSASendTo ÇÔ¼ö´Â SOCKET_ERRORÀ» ¹Ýȯ ÇÏ°í, WSA_IO_PENDING À̶ó´Â ƯÁ¤ÇÑ ¿¡·¯Äڵ带 ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ lpNumberOfBytesSent ¸Å°³º¯¼ö´Â ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê½À´Ï´Ù. ¿À¹ö·¦ ¿¬»êÀÌ ¿Ï·áµÇ¸é, Àü¼ÛµÈ µ¥ÀÌÅÍ´Â ¿Ï·á·çƾ(completion routine)ÀÇ cbTransferred ¸Å°³º¯¼ö³ª, WSAGetOverlappedResult ÇÔ¼öÀÇ lpcbTransfer ¸Å°³º¯¼ö¸¦ ÅëÇؼ­ ¾Ë·ÁÁö°Ô µË´Ï´Ù.

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

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

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

lpCompletionRoutine ¸Å°³º¯¼ö°¡ NULLÀÌ ¾Æ´Ï¶ó¸é, hEvent Çʵå´Â ¹«½ÃµË´Ï´Ù. ±×¸®±¸, ¿Ï·á·çƾ¿¡ È帧Á¤º¸(context information)À» ³Ñ±âµµ·Ï ¾îÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. lpCompletionRoutine ¸Å°³º¯¼ö°¡ NULLÀÌ ¾Æ´Ñ °ªÀ» ³Ñ±â´Â ÄÝ·¯¿Í, °°Àº ¿À¹ö·¦ I/O¿¡ ´ëÇؼ­ WSAGetOverlappedResult ÇÔ¼ö¸¦ ³ªÁß¿¡ È£ÃâÇÏ´Â °ÍÀº WSAGetOverlappedResult ÇÔ¼ö¸¦ TRUE¸¦ ¹ÝȯÇÏ°Ô ÇϱâÀ§Çؼ­ fWait ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ hEvent ÇʵåÀÇ »ç¿ë¹ýÀº Á¤ÀǵÇÁö ¾Ê°í, hEvent ¸¦ »ç¿ëÇÏ¿© ´ë±âÇÏ·Á°í ÇÑ´Ù¸é, ¿¹±âÄ¡¾ÊÀº °á°ú¸¦ ÃÊ·¡ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. - ( ¾Æ~~ Á¤¸» Çؼ® ¾ÊµÇ³×¿ä... ¾Æ·¡¿¡ ¿ø¹®À» ÷°¡ÇÏ°Ú½À´Ï´Ù. )

<¿ø¹®> If lpCompletionRoutine is not NULL, the hEvent field is ignored and can be used by the application to pass context information to the completion routine. A caller that passes a non-NULL lpCompletionRoutine and later calls WSAGetOverlappedResult for the same overlapped IO request may not set the fWait parameter for that invocation of WSAGetOverlappedResult to TRUE. In this case the usage of the hEvent field is undefined, and attempting to wait on the hEvent field would produce unpredictable results.

¿Ï·á·çƾÀº Win32 ÆÄÀÏ I/O ¿Ï·á·çƾÀ¸·Î ±ÔÁ¤µÈ °Í°ú °°Àº ±ÔÄ¢À» µû¸¨´Ï´Ù. ¿Ï·á·çƾÀº WSAWaitForMultipleEvents ÇÔ¼ö°¡ fAlertable ¸Å°³º¯¼ö¸¦ TRUEÇÏ¿© È£ÃâµÇ¾úÀ» ¶§ ¿Í °°ÀÌ, Àü¼ÛÀÛ¾÷ ¾²·¹µå°¡ ¹ÝÀÀÇÒ ¼ö ÀÖ´Â »óÅ°¡ µÇ±â Àü±îÁö È£ÃâµÇÁö ¾Ê½À´Ï´Ù.

Àü¼Û ÇÁ·Î¹ÙÀÌ´õ´Â ¼ÒÄÏ I/O ¿Ï·á ·çƾÀÇ ³»ºÎ¿¡¼­ Àü¼ÛÀ̳ª ¼ö½Å ¿¬»êÀ» ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÏ°í ÀÖ½À´Ï´Ù. ±¸¸®±¸, ÁÖ¾îÁø ¼ÒÄÏ¿¡ ´ëÇؼ­ ¿Ï·á·çƾÀÌ ¿Ï·áµÇÁö(nested) ¾ÊÀ» °ÍÀ̶ó°í º¸ÁõÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ½Ã°£¿¡ ¹Î°¨ÇÑ(ex. »¡¸®º¸³»¾ß Çϴµ¥ÀÌÅÍ) µ¥ÀÌÅÍÀÇ Ã³¸®°¡ °¡´ÉÇÏ°Ô µË´Ï´Ù.

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

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

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

 

Return Values

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

 

Error Codes

WSANOTINITIALISED

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

WSAENETDOWN

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

WSAEACCES ÁöÁ¤µÈ ¾îµå·¹½º´Â ºê·Îµåij½ºÆà ¾îµå·¹½º Àε¥, ÀûÀýÇÑ Ç÷¡±×°¡ »ç¿ëµÇÁö ¾Ê¾Ò½À´Ï´Ù.
WSAEINTR ºí·°Å· À©¼Ó v1.1 ÀÌ WSACancelBlockingCall ÇÔ¼ö¿¡¼­ Ãë¼ÒµÇ¾ú½À´Ï´Ù
WSAEINPROGRESS

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

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

 

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