ÇöÀç°Á : 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)¸¦ °¡Áö°í ÀÖ´Ù.
- Blocking ¸ðµå
- Non-blocking ¸ðµå
- Asynchronous(ºñµ¿±â) ¸ðµå
(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 À©¼ÓÀÇ µ¿ÀÛ