ÇöÀç°­Á : Winsock ÇÁ·Î±×·¡¹Ö ´ÙÀ½: 5.2 À©¼ÓÀÇ µ¿ÀÛ


5.1 À©¼ÓÀÇ ÀÌÇØ

¢º À©¼ÓÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®(Microsoft) À©µµ¿ì3.1 ¶Ç´Â À©µµ¿ì95¿¡¼­ Á¦°øÇÏ´Â TCP/IP ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ API(Appli- cation Program Interface)·Î¼­ »ç¿ë¹æ¹ý ¹× ±âº» µ¿ÀÛÀÌ UNIXÀÇ BSD ¼ÒÄÏ°ú °ÅÀÇ °°À¸¸ç BSD ¼ÒÄÏ°ú ¸¶Âù°¡Áö·Î Ŭ¶óÀ̾ðÆ®-¼­¹ö ¸ðµ¨À» ±âÃÊ·Î ÇÏ¿© ÀÌ¿ëµÈ´Ù.

5.1.1 UNIX BSD ¼ÒÄÏ°ú À©¼ÓÀÇ Â÷ÀÌ

¢º À©¼ÓÀÇ »ç¿ë¹æ¹ý°ú ¹®¹ýÀÌ BSD ¼ÒÄÏÀÇ °æ¿ì¿Í À¯»çÇϱâ´Â ÇÏÁö¸¸ À©¼Ó°ú BSD ¼ÒÄÏ¿ëÀ¸·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ¼­·Î ȣȯ¼ºÀÌ ¾øÀ¸¸ç ÀÌ µÎ °¡Áö ¼ÒÄÏ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ È£È¯¼ºÀ» °®À¸·Á¸é ¸¹Àº ºÎºÐÀ» ¼öÁ¤ÇÏ¿©¾ß ÇÑ´Ù.

¢º ¸ÕÀú À©µµ¿ì¿Í UNIX ¿î¿µÃ¼Á¦ÀÇ Â÷ÀÌÁ¡À» ºñ±³ÇÏ¸é ´ÙÀ½°ú °°´Ù.

¢º ù°, UNIX¿Í ´Þ¸® À©µµ¿ì3.1 ÀÌÇÏ¿¡¼­´Â ¸ÖƼŽºÅ·À» Áö¿øÇÏÁö ¾Ê´Â´Ù.

¢º À©µµ¿ì95´Â ¸ÖƼŽºÅ·°ú À¯»çÇÑ ¸ÖƼ¾²·¹µå(multi- thread)¸¦ Áö¿øÇϱâ´Â ÇÏÁö¸¸ À©¼ÓÀÌ Ã³À½ ¼Ò°³µÈ °ÍÀº ¸ÖƼŽºÅ·ÀÌ Áö¿øµÇÁö ¾Ê´Â À©µµ¿ì3.1¿¡¼­¿´À¸¸ç À©µµ¿ì95¿Í À©µµ¿ì3.1¿¡¼­ÀÇ ÇÁ·Î±×·¥ ȣȯ¼ºÀ» À¯ÁöÇϱâ À§ÇÏ¿© À©¼ÓÀº À©µµ¿ì95¿¡¼­µµ °è¼Ó '¸ÖƼŽºÅ·ÀÌ Áö¿øµÇÁö ¾Ê´Â' ȯ°æÀ» °¡Á¤ÇÏ°í ÀÖ´Ù.

¢º ÀÌ¿Í°°ÀÌ UNIX¿Í À©µµ¿ì ¿î¿µÃ¼Á¦ÀÇ ±âº»ÀûÀÎ Â÷ÀÌ·Î ÀÎÇÏ¿© À©¼ÓÀº BSD ¼ÒÄÏ°ú ³»ºÎÀûÀ¸·Î ¸Å¿ì ´Ù¸¥ Ư¼ºÀ» °®°í ÀÖÀ¸¸ç ÇÁ·Î±×·¥ ÀÛ¼º½Ã¿¡µµ À̸¦ °í·ÁÇÏ¿©¾ß ÇÑ´Ù.

¢º µÑ°·Î À©¼ÓÀº ÁÖ·Î À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ¸·Î ±¸ÇöµÇ´Âµ¥, À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀÌ '¸Þ½ÃÁö ±¸µ¿Çü ÇÁ·Î±×·¡¹Ö'À̶ó´Â °ÍÀÌ UNIX ÇÁ·Î±×·¥°ú Å©°Ô ´Ù¸¥ Á¡ÀÌ´Ù.

¢º ¸Þ½ÃÁö´Â '¾î¶² »ç°Ç(event)ÀÇ ¹ß»ýÀ» ¾Ë¸®´Â ½ÅÈ£'¶ó°í ÇÒ ¼ö Àִµ¥, ¸Þ½ÃÁö´Â »ç¿ëÀÚ°¡ ¸¸µç ÀÀ¿ë À©µµ¿ìµéÀÌ ¼­·Î ÁÖ°í¹Þ°Å³ª, À©µµ¿ì ¿î¿µÃ¼Á¦°¡ »ç¿ëÀÚ À©µµ¿ì¿¡°Ô Àü´ÞÇÏ´Â °ÍÀÌ´Ù.

¢º ÇÑÆí À©¼Ó ÇÁ·Î±×·¡¹Ö¿¡¼­´Â À©¼ÓÀÇ ±â´ÉÀ» Á¦°øÇÏ´Â ¶óÀ̺귯¸®·Î DLL(Dynamic Link Library)ÀÎ Winsock.dllÀ» »ç¿ëÇÑ´Ù.

¢º ÀÌ·¯ÇÑ DLL ¶óÀ̺귯¸®´Â ÄÄÆÄÀϽà ¸µÅ©µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÀ¿ë ÇÁ·Î±×·¥ ¼öÇà½Ã ¸µÅ©µÈ´Ù.

¢º DLLÀ» »ç¿ëÇÏ´Â °ÍÀÇ ÀåÁ¡Àº ¿©·¯ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÇϳªÀÇ DLLÀ» °øÀ¯ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

¢º ¿¹¸¦µé¸é ÇϳªÀÇ Winsock.dllÀÌ ¼öÇàÁßÀÌ¸é ¿©·¯ À©¼Ó ÀÀ¿ë ÇÁ·Î±×·¥µéÀÌ ÀÌ°ÍÀ» µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

¢ºÀÌ¿Ü¿¡µµ BSD ¼ÒÄÏ°ú À©¼ÓÀº ¼ÒÄÏÀ» ¿­°í ´Ý´Â µ¥ ¾²ÀÌ´Â ÇÔ¼ö°¡ ´Ù¸¥µ¥ À©¼ÓÀÇ °æ¿ì WSAStartup(), WSACleanup()ÇÔ¼ö¸¦ ÅëÇØ ¼ÒÄÏ°ú Winsock.dll°úÀÇ °ü°è¸¦ ¼³Á¤, ÇØÁ¦ÇØ ÁÖ´Â °úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù.

¢º BSD ¼ÒÄÏó·³ close()¸¦ ÀÌ¿ëÇØ ¼ÒÄÏÀ» ´Ý´Â °ÍÀÌ ¾Æ´Ï¶ó closesocket() ÇÔ¼ö¸¦ »ç¿ëÇØ ´Ý¾Æ¾ß ÇÑ´Ù.

¢º ÀÌ¿Í°°Àº Â÷ÀÌ´Â UNIX¿Í À©µµ¿ì ¿î¿µÃ¼Á¦ÀÇ Æ¯¼ºÀÇ Â÷ÀÌ·Î ÀÎÇÑ °ÍÀ̸ç ÇÔ¼öÀÇ À̸§¸¸ ´Ù¸¥ °ÍÀÌ ¾Æ´Ï¶ó ÇÔ¼öÀÇ ±¸Ã¼ÀûÀÎ ³»ºÎ µ¿ÀÛµµ ¼­·Î ´Ù¸£´Ù.

5.1.2 À©¼ÓÀÇ µ¿ÀÛ¸ðµå

¢º BSD ¼ÒÄÏ°ú ¸¶Âù°¡Áö·Î À©¼ÓÀÌ Á¦°øÇÏ´Â ¼ÒÄϵµ ´ÙÀ½°ú °°Àº ¼¼ °¡Áö µ¿ÀÛ¸ðµå (operating mode)¸¦ °¡Áö°í ÀÖ´Ù.

(1) Blocking ¸ðµå

¢º socket() ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ¿© ÇϳªÀÇ ¼ÒÄÏÀ» ¸¸µé¸é ÀÌ°ÍÀº µðÆúÆ®·Î blocking ¸ðµå·Î µ¿ÀÛÇÏ´Â ¼ÒÄÏÀÌ µÈ´Ù.

¢º ÀÌ·¯ÇÑ blocking ¸ðµåÀÇ ¼ÒÄÏÀ» ´ë»óÀ¸·Î accept(), close- socket(), connect(), recv(), recvfrom(), send(), sendto()¿Í °°Àº ÇÔ¼ö¸¦ È£ÃâÇϸé ÇÔ¼ö°¡ ¿øÇÏ´Â µ¿ÀÛÀ» ¿Ï·áÇÒ ¶§±îÁö ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º°¡ blockingµÉ ¼ö ÀÖ´Ù.

¢º Áï, blocking ¸ðµåÀÇ ¼ÒÄÏ¿¡¼­´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ À§¿Í°°Àº ÇÔ¼ö¸¦ È£ÃâÇÏ¿´À» ¶§ ±× µ¿ÀÛÀÌ ¿Ï·áµÇ¾î ÇÔ¼ö°¡ ¸®ÅϵǾî¾ß ´ÙÀ½ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

¢º ÇÑÆí ¸ÖƼŽºÅ·ÀÌ Áö¿øµÇ´Â UNIX ÄÄÇ»ÅÍ¿¡¼­´Â block- ing ¸ðµåÀÇ ¼ÒÄÏÀ» »ç¿ëÇÏ¿© ¾î¶² ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ºí·ÏµÇ¾îµµ ÄÄÇ»ÅÍ Àüü µ¿ÀÛ¿¡´Â Å« ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù.

¢º ¿Ö³ÄÇÏ¸é ¸ÖƼŽºÅ· ¿î¿µÃ¼Á¦¿¡¼­´Â °¢°¢ÀÇ ÇÁ·Î¼¼½ºµéÀÌ µ¶¸³ÀûÀ¸·Î ¼öÇàµÇ¹Ç·Î ÇÑ ÇÁ·Î¼¼½º°¡ ºí·ÏµÇ¾î À־ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº °è¼Ó ¼öÇàµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

¢º ±×·¯³ª À©µµ¿ì3.1°ú °°Àº ´ÜÀÏ Å½ºÅ· ¿î¿µÃ¼Á¦¿¡¼­´Â ÇÁ·Î±×·¥ÀÌ ÇÑ °÷¿¡ ºí·ÏµÇ¾î ÀÖÀ¸¸é PC Àüü°¡ ºí·ÏµÉ ¼ö ÀÖ´Ù.

¢º ¶ÇÇÑ blocking ¸ðµåÀÇ ¼ÒÄÏÀ» »ç¿ëÇϸé ÇϳªÀÇ ÇÁ·Î±×·¥¿¡¼­ ¿©·¯ °³ÀÇ ¼ÒÄÏÀ» µ¿½Ã¿¡ °³¼³ÇÏ¿© °¢°¢ÀÇ ÀÔÃâ·ÂÀ» ó¸®ÇÏ´Â ÇüÅÂÀÇ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱⰡ ¾î·Æ´Ù.

¢º µû¶ó¼­ À©¼Ó ÇÁ·Î±×·¡¹Ö¿¡¼­´Â À̸¦ ÇØ°áÇϱâ À§ÇÏ¿© ¼ÒÄÏÀ» non-blocking ¸ðµå ¶Ç´Â ºñµ¿±â ¸ðµå·Î º¯°æÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.

(2) Non-blocking ¸ðµå

¢º Non-blocking ¸ðµå ¼ÒÄÏÀ̶õ accept(), closesocket(), connect(), recv(), recvfrom(), send(), sendto()¿Í °°Àº ÇÔ¼ö°¡ È£ÃâµÇ¾úÀ» ¶§ ÇÔ¼öÀÇ ¿øÇÏ´Â µ¿ÀÛÀÌ ¿Ï·áµÇ´Â °Í°ú ¹«°üÇÏ°Ô ÀÏ´Ü ÇÔ¼ö°¡ Áï½Ã ¸®ÅϵǴ ¼ÒÄÏÀ» ¸»ÇÑ´Ù.

¢º ¼ÒÄÏÀÌ Ã³À½ ¸¸µé¾îÁö¸é µðÆúÆ®·Î blocking ¸ðµå°¡ µÇ´Âµ¥ ÇÁ·Î±×·¡¸Ó´Â ÇÊ¿ä¿¡ µû¶ó blocking ¸ðµåÀÇ ¼ÒÄÏÀ» non-blocking ¸ðµå·Î ¹Ù²Ü ¼ö ÀÖ´Ù.

¢º Non-blocking ¸ðµåÀÇ ¼ÒÄÏÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÌ°÷¿¡¼­ ¸ØÃß¾î ÀÖÁö(block) ¾Ê°Ô Çϱâ À§Çؼ­ÀÌ´Ù.

¢º Non-blcoking ¸ðµåÀÇ ¼ÒÄÏ¿¡¼­ ÇÔ¼ö È£ÃâÀÌ Áï½Ã ¸®ÅϵǾúÀ» ¶§ ±× °á°ú´Â ´ÙÀ½°ú °°ÀÌ µÎ °¡Áö·Î Á¾·ù·Î ³ª´­ ¼ö ÀÖ´Ù.

1) ¼º°øÀûÀÎ ¸®ÅÏ: ÇÔ¼öÀÇ µ¿ÀÛÀÌ Áï½Ã ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾úÀ½.

2) ¿¡·¯ ¸®ÅÏ: ÇÔ¼ö ¼öÇàÁß ¿¡·¯°¡ ¹ß»ýÇ߰ųª ÇÔ¼ö°¡ ºí·ÏµÇ¾úÀ½.

¢º Áï, non-blocking ¸ðµå ¼ÒÄÏ¿¡¼­ Áï½Ã ¸®ÅÏµÈ ÇÔ¼ö È£Ãâ °á°ú´Â ¼º°øÀûÀÎ °æ¿ìµµ ÀÖ°í ½ÇÆÐÇÑ °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ´Ù.

¢º ¿¡·¯ ¸®ÅÏÀÎ °æ¿ì ¿¡·¯Äڵ尡 WSAEWOULDBLOCKÀ̸é, ÀÌ°ÍÀÇ Àǹ̴ ÇÔ¼öÀÇ µ¿ÀÛÀÌ À߸øµÇ¾ú´Ù´Â °ÍÀÌ ¾Æ´Ï¶ó 'ÀÌ ÇÔ¼ö°¡ µ¿ÀÛ ¿Ï·áµÉ ¶§±îÁö ±â´Ù¸°´Ù¸é blockµÉ ¼ö ÀÖ´Ù'´Â °ÍÀ» ÀǹÌÇÑ´Ù.

¢º ÀÌ¿Í°°ÀÌ ¿¡·¯Äڵ尡 WSAEWOULDBLOCKÀÎ °æ¿ì ±× ¿øÀÎÀº ´ÙÀ½ÀÇ µÎ °¡Áö Áß Çϳª°¡ µÈ´Ù.

1) Winsock.dllÀÌ ÇÔ¼ö°¡ ¿øÇÏ´Â µ¿ÀÛÀ» ½ÃÀÛÇßÀ¸³ª ¾ÆÁ÷ Á¾·áµÇÁö ¾Ê¾ÒÀ½.

2) ÇÔ¼öÀÇ µ¿ÀÛÀÌ ½ÃÀÛµÇÁö ¸øÇßÀ¸¸ç ´Ù½Ã Àç½Ãµµ¸¦ ÇÊ¿ä·Î ÇÔ.

¢º À§ÀÇ Ã¹¹ø° °æ¿ì´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÇÔ¼öÀÇ µ¿ÀÛ ¿Ï·á ½ÃÁ¡À» ¾Ë¾Æ¼­ ±× °á°ú¸¦ ó¸®ÇÏ¿©¾ß ÇÏ¸ç µÎ¹ø° °æ¿ì´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÌ ÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ½ÃÀÛµÉ ¶§±îÁö ÇÔ¼ö¸¦ °è¼Ó ¹Ýº¹ÇÏ¿© È£ÃâÇØ¾ß ÇÑ´Ù.

¢º ¾î¶² °æ¿ìÀ̵ç non-blocking ¸ðµå ¼ÒÄÏÀÇ Ã³¸®´Â ´Ù¼Ò º¹ÀâÇÏ¸ç µû¶ó¼­ ´ÙÀ½¿¡ ¼³¸íÇÒ ºñµ¿±â ¸ðµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù.

(3) Asynchronous(ºñµ¿±â) ¸ðµå

¢º ºñµ¿±â ¸ðµå¿¡¼­µµ non-blocking ¸ðµå¿¡¼­Ã³·³ ¼ÒÄÏ °ü·Ã ÇÔ¼öÀÇ È£ÃâÀÌ ¹Ù·Î ¸®ÅϵȴÙ.

¢º ±×·¯³ª ºñµ¿±â ¸ðµå¿¡¼­´Â non-blocking ¸ðµå¿Í ´Þ¸®, ÇÔ¼öÀÇ µ¿ÀÛÀÌ ¿Ï·áµÇ´Â ½ÃÁ¡, ¶Ç´Â ÇÔ¼öÀÇ ½ÇÇàÀÌ ½ÃÀÛµÇÁö ¸øÇÑ °æ¿ì ´ÙÀ½¿¡ ´Ù½Ã Àç½ÃµµÇÏ¿©¾ß ÇÏ´Â ½ÃÁ¡À» ½Ã½ºÅÛ(Winsock.dll)ÀÌ ¸Þ½ÃÁö ó¸® ¹æ½ÄÀ¸·Î ³ªÁß¿¡ ÀÀ¿ë ÇÁ·Î±×·¥¿¡°Ô ¾Ë·ÁÁØ´Ù.

¢º Áï, ºñµ¿±â ¸ðµåÀÇ ¼ÒÄÏ¿¡¼­ ¼ÒÄÏ°ü·Ã ÇÔ¼öÀÇ ½ÇÇà°á°úÀÇ ¿¡·¯Äڵ尡 WSAEWOULDBLOCKÀÏ ¶§ÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.

1) ÇÔ¼öÀÇ µ¿ÀÛÀÌ ¿Ï·áµÇ¸é ±× ¶§ Winsock.dllÀÌ ¸Þ½ÃÁö¸¦ ÅëÇÏ¿© µ¿ÀÛÀÇ ¿Ï·á¸¦ ¾Ë·ÁÁְųª,

2) ÇÔ¼öÀÇ µ¿ÀÛÀÌ ½ÃÀÛÇÏÁö ¸øÇßÀ¸¸ç, ÇÔ¼ö¸¦ ´Ù½Ã È£ÃâÇØ¾ß ÇÒ ½ÃÁ¡À» ³ªÁß¿¡ ºñµ¿±âÀûÀ¸·Î ¾Ë·ÁÁÖ°ÚÀ½.

¢º ¾Õ¿¡ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ UNIX¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼­´Â ÇÔ¼ö°¡ ºí·ÏµÇ´Â °ÍÀÌ ¹®Á¦°¡ µÇÁö ¾ÊÀ¸¹Ç·Î ¹Ýµå½Ã ºñµ¿±â ¸ðµåÀÇ ¼ÒÄÏÀ» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù.

¢º ±×·¯³ª À©¼Ó¿¡¼­´Â ºñµ¿±â ¸ðµå·Î ¼ÒÄÏÀ» »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù.

(4) Blocking ÇÔ¼ö

¢º ÇÑÆí blocking ¸ðµåÀÇ ¼ÒÄÏÀÌ ¾Æ´Ï´õ¶óµµ (Áï, non- blocking ¶Ç´Â ºñµ¿±â ¸ðµåÀÇ ¼ÒÄÏ¿¡¼­µµ) ¾î¶² ÇÔ¼öµéÀº ÇÔ¼ö ÀÚüÀÇ Æ¯¼º»ó ºí·ÏµÉ ¼ö ÀÖ´Â ÇÔ¼ö°¡ ÀÖ´Ù.

¢º ÀÌ·¯ÇÑ ÇÔ¼öµéÀº ³×Æ®¿÷ ½Ã½ºÅÛ(Áï, TCP/IP)ÀÌ ¾î¶² Á¤º¸¸¦ ¾ò¾î³»¾ß¸¸ ±× °á°ú¸¦ ¸®ÅÏÇÒ ¼ö ÀÖÀ¸¸ç ±× Á¤º¸¸¦ ¾ò´Âµ¥ ´Ù¼Ò ½Ã°£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.

¢º¿¹¸¦µé¾î È£½ºÆ®ÀÇ µµ¸ÞÀÎ ³×ÀÓÀ» ÀÔ·ÂÇÏ°í ÀÌ È£½ºÆ®ÀÇ IP ÁÖ¼Ò µîÀÇ Á¤º¸¸¦ ¾ò¾î³»´Â ÇÔ¼ö gethostbyname()ÀÌ Ã³¸®µÇ±â À§ÇÏ¿©´Â, ³×Æ®¿÷ ½Ã½ºÅÛÀÌ DNS ¼­¹ö¿¡°Ô ÇÊ¿äÇÑ Á¤º¸¸¦ ¹®ÀÇÇÏ°í ±× °á°ú°¡ µµÂøÇÒ ¶§±îÁö ±â´Ù·Á¾ß¸¸ ÇÑ´Ù.

¢º ÀÌ·¯ÇÑ ÇÔ¼öµéÀ» 'blocking ÇÔ¼ö'¶ó°í ºÎ¸£¸ç Ç¥ 5-1¿¡ ´ëÇ¥ÀûÀÎ blocking ÇÔ¼öµéÀ» Á¤¸®ÇÏ¿´´Ù.

ÇÔ ¼ö

±â ´É

select() ¼ÒÄÏÀÇ »óÅ º¯È­(Àбâ, ¾²±â, ¿À·ù ¹ß»ý)¸¦ ¾Ë·ÁÁÜ
gethostbyaddr() È£½ºÆ® ÁּҷκÎÅÍ È£½ºÆ® Á¤º¸¸¦ ¾òÀ½
gethostbyname() È£½ºÆ® À̸§À¸·ÎºÎÅÍ È£½ºÆ® Á¤º¸¸¦ ¾òÀ½
getprotobyname() ÇÁ·ÎÅäÄÝ À̸§À¸·ÎºÎÅÍ ÇÁ·ÎÅäÄÝ ¹øÈ£¸¦ ¾òÀ½
getprotobynumber() ÇÁ·ÎÅäÄÝ ¹øÈ£·ÎºÎÅÍ ÇÁ·ÎÅäÄÝ À̸§À» ¾òÀ½
getservbyname() ¼­ºñ½º À̸§À¸·ÎºÎÅÍ ¼­ºñ½º Á¤º¸¸¦ ¾òÀ½
getservbyport() Æ÷Æ®¹øÈ£·ÎºÎÅÍ ¼­ºñ½º Á¤º¸¸¦ ¾òÀ½

Ç¥ 5-1 ´ëÇ¥ÀûÀÎ blocking ÇÔ¼ö

¢º Ç¥ 5-1¿¡ ¼Ò°³ÇÑ blocking ÇÔ¼öµéÀº ¼ÒÄÏÀÇ µ¿ÀÛ ¸ðµå¿¡ °ü°è¾øÀÌ Ç×»ó ºí·ÏµÉ ¼ö ÀÖ´Â ÇÔ¼öÀÌ´Ù

¢º ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§ ÇÁ·Î±×·¥ÀÌ ºí·ÏµÇ´Â ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿©, À©¼Ó¿¡¼­´Â À̵é blocking ÇÔ¼ö¿Í °°Àº ±â´ÉÀ» ¼öÇàÇϸ鼭 ½ÇÁ¦·Î´Â ºñµ¿±â ¸ðµå·Î µ¿ÀÛÇÏ´Â Áï, ÇÔ¼ö ½ÇÇà°á°ú¸¦ ºñµ¿±âÀûÀ¸·Î ¾Ë·ÁÁÖ´Â ºñµ¿±â ÇÔ¼öµéÀ» Á¦°øÇÏ°í ÀÖ´Ù.

¢º À̵éÀ» Ç¥ 5-2¿¡ Á¤¸®ÇÏ¿´À¸¸ç ÀÚ¼¼ÇÑ ³»¿ëÀº 5.2.2Àý¿¡¼­ ¼³¸íÇÏ°Ú´Ù.

ºñµ¿±â ÇÔ¼ö

±â ´É

WSAAsyncSelect() ¼ÒÄÏÀÇ I/O »óÅ º¯È­ Áï, ¿¬°á¿äû, µ¥ÀÌÅÍ ¼ö½Å, ¼Û½Å ¹öÆÛÀÇ »ç¿ë°¡´É µîÀÇ À̺¥Æ®¸¦ ½Ã½ºÅÛÀÌ ¸Þ½ÃÁö¸¦ ÅëÇÏ¿© ¾Ë·ÁÁÖµµ·Ï ¿äûÇÔ
WSAAsyncGetHostByAddr() È£½ºÆ® ÁּҷκÎÅÍ È£½ºÆ® Á¤º¸¸¦ ¾òÀ½
WSAAsyncGetHostByName() È£½ºÆ® À̸§À¸·ÎºÎÅÍ È£½ºÆ® Á¤º¸¸¦ ¾òÀ½
WSAAsyncGetProtoByName() ÇÁ·ÎÅäÄÝ À̸§À¸·ÎºÎÅÍ ÇÁ·ÎÅäÄÝ ¹øÈ£¸¦ ¾òÀ½
WSAAsyncGetProtoByNumber() ÇÁ·ÎÅäÄÝ ¹øÈ£·ÎºÎÅÍ ÇÁ·ÎÅäÄÝ À̸§À» ¾òÀ½
WSAAsyncGetServByName() ¼­ºñ½º À̸§À¸·ÎºÎÅÍ ¼­ºñ½º Á¤º¸¸¦ ¾òÀ½
WSAAsyncGetServByPort() Æ÷Æ®¹øÈ£·ÎºÎÅÍ ¼­ºñ½º Á¤º¸¸¦ ¾òÀ½

Ç¥ 5-2 Blocking ÇÔ¼ö(Ç¥ 5-1)ÀÇ ±â´ÉÀ» ¼öÇàÇÏ´Â À©¼ÓÀÇ ºñµ¿±â ÇÔ¼ö

5.1.3 À©¼ÓÀÇ ½ÃÀÛ°ú Á¾·á

(1) WSAStartup()

¢º WSAStartup()Àº À©¼Ó °ü·Ã ÇÔ¼öµéÀ» »ç¿ëÇϱâ Àü¿¡ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÏ´Â ÇÔ¼ö·Î, À©¼Ó ¶óÀ̺귯¸®ÀÎ Winsock.dllÀ» ÃʱâÈ­ÇÑ´Ù.

¢º WSAStartup()Àº ÀϹÝÀûÀ¸·Î À©µµ¿ì ¸Þ½ÃÁö WM_CREATE³ª WM_INITDIALOGÀÇ Ã³¸® ºÎºÐ¿¡¼­ È£ÃâµÈ´Ù.

¢º WSAStartup()Àº µÎ °³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î Çϴµ¥, ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿ä±¸ÇÏ´Â ÃÖ¼ÒÀÇ À©¼Ó ¹öÀü(1.0 ¶Ç´Â 1.1) °ª°ú, WSAStartup()ÀÌ ¼öÇàµÈ ÈÄ ³×Æ®¿÷ ½Ã½ºÅÛ(Winsock.dll)ÀÌ À©¼Ó °ü·Ã Á¤º¸¸¦ ¾Ë·ÁÁִµ¥ »ç¿ëÇÒ À©¼ÓÁ¤º¸ ±¸Á¶Ã¼, Áï WSADATA ŸÀÔÀÇ ±¸Á¶Ã¼ º¯¼öÀÇ ÁÖ¼Ò¸¦ ÇÊ¿ä·Î ÇÑ´Ù.

¢º ´ÙÀ½Àº ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ À©¼ÓÀÇ ¹öÀü°ªÀ» ÁöÁ¤ÇÏ°í WSAStartup()À» È£ÃâÇÏ´Â ¿¹ÀÌ´Ù.

WORD wVersionRequired ; /* »ç¿ëÇÒ À©¼Ó ¹öÀü °ª */

WSADATA wsaData ; /* À©¼ÓÁ¤º¸¸¦ ´ãÀ» ±¸Á¶Ã¼ */

wVersionRequired = MAKEWORD(0, 1); /* À©¼Ó ¹öÀü °ªÀ» 1.0À¸·Î ¼¼Æà */

WSAStartup(wVersionRequired, &wsaData); /* À©¼ÓÀÇ ½ÃÀÛ */

¢º À§¿¡¼­ wsaData´Â WSADATA ŸÀÔÀÇ ±¸Á¶Ã¼ º¯¼ö·Î ¿©±â¿¡´Â WSAStartup() ÇÔ¼ö°¡ °³¼³ÇÏ¿© ¾ÕÀ¸·Î »ç¿ëÇÒ À©¼Ó¿¡ °üÇÑ Á¤º¸°¡ ¼ö·ÏµÇ¾î ¸®ÅϵȴÙ.

¢º WSADATA ±¸Á¶Ã¼ÀÇ Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù(Winsock.h ÆÄÀÏ ÂüÁ¶).

typedef struct WSADATA {

WORD wVersion; /* À©¼Ó ¹öÀü (¿¹ 1.0) */

WORD wHighVersion; /* ÃÖ»óÀ§ÀÇ À©¼Ó ¹öÀü (¿¹ 1.1) */

char szDescription[WSADESCRIPTION_LEN+1]; /* ȸ»çÁ¤º¸ */

char szSystemStatus[WSASYS_STATUS_LEN+1]; /* ±¸¼ºÁ¤º¸ */

unsigned short iMaxSockets; /* ÇÑ ÇÁ·Î¼¼½º°¡ ¿­ ¼ö ÀÖ´Â ¼ÒÄÏ ¼ö */

unsigned short iMaxUdpDg; /* UDP ÆÐŶ Å©±â */

char FAR *lpVendorInfo; /* ȸ»çº° µ¥ÀÌÅÍ ±¸Á¶ÀÇ Æ÷ÀÎÅÍ */

} WSADATA;

¡¡

(2) WSACleanup()

¢º À©¼ÓÀÇ »ç¿ëÀ» Á¾·áÇÒ ¶§ È£ÃâÇϸç WSAStartup()¿¡ ´ëÀÀµÇ´Â ÇÔ¼öÀÌ´Ù.


ÇöÀç°­Á : Winsock ÇÁ·Î±×·¡¹Ö ´ÙÀ½: 5.2 À©¼ÓÀÇ µ¿ÀÛ