[ 1Àå, 2Àå, 3Àå, 4Àå, 5Àå, 6Àå, 7Àå, 8Àå, 9Àå, 10Àå, 11Àå, 12Àå, 13Àå, 14Àå, 15Àå, 16Àå, 17Àå, 18Àå, 19Àå, 20Àå, 21Àå, 22Àå, 23Àå, 24Àå, 25Àå, 26Àå, 27Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

11. ¼ÒÄÏ

ÀÌ Àå¿¡¼­´Â ¼ÒÄÏÀ» »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º°£ÀÇ Åë½Å¿¡ °üÇÑ GNUÀåÄ¡¿¡ ´ëÇØ ¼­¼úÇÑ´Ù.

¼ÒÄÏÀº ÀϹÝÀûÀÎ ÇÁ·Î¼¼½º°£ÀÇ Åë½Å ä³ÎÀÌ´Ù. ÆÄÀÌÇÁó·³ ¼ÒÄÏÀº ÆÄÀÏ ¼­¼úÀÚó·³ Ç¥ÇöµÈ´Ù. ±×·¯ ³ª ÆÄÀÌÇÁ¿Í´Â ´Þ¸® ¼ÒÄÏÀº °ü·Ã ¾ø´Â ÇÁ·Î¼¼½º °£ÀÇ Åë½Å,³×Æ®¿öÅ©¸¦ ÅëÇÏ¿© ¼­·Î ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ¼öÇàµÇ°í ÀÖ´Â ÇÁ·Î¼¼½º°£ÀÇ Åë½ÅÀ» Á¦°øÇÑ´Ù. ¼ÒÄÏÀº ÁÖ·Î ´Ù¸¥ ÄÄÇ»ÅͰ£ÀÇ Åë½ÅÀÇ ¼ö´ÜÀÌ´Ù. ; telnet, rlogin, ftp, talk, ±×¸®°í ³×Æ®¿öÅ© ÇÁ·Î±×·¥µéÀº ¼ÒÄÏÀ» »ç¿ëÇÑ´Ù. ¸ðµç ¿î¿µÃ¼Á¦°¡ ¼ÒÄÏÀ» Áö¿øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. GNU¶óÀ̺귯¸®¿¡¼­ 'sys/socket.h' Àº ¿î¿µÃ¼Á¦¿Í »ó°ü¾øÀÌ Á¸ÀçÇÑ´Ù. ±×·¯³ª ¸¸¾à ½Ã½ºÅÛÀÌ ¼ÒÄÏÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é, ¼ÒÄÏÇÔ¼ö´Â Ç×»ó ½ÇÆÐÇÑ´Ù.

¹Ì¿Ï¼º: ¿ì¸®´Â ÇöÀç ÀÎÅÍ³Ý ÀÎÅÍÆäÀ̽º ¼³Á¤À̳ª ºê·Îµåij½ºÆ® ¸Þ½ÃÁö ±â´É¿¡ °üÇÏ¿©´Â ¹®¼­È­ÇÏ Áö ¸øÇß´Ù.

11.1 ¼ÒÄÏ °³³ä

´ç½ÅÀÌ ¼ÒÄÏÀ» ¸¸µé¶§, ¹Ýµå½Ã ´ç½ÅÀÌ ¾î¶² Åë½Å ½ºÅ¸ÀÏÀ» ¾µ °ÍÀÎÁö, ¾î¶² ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ °ÍÀÎ Áö ¸í½ÃÇØ¾ß ÇÑ´Ù. ¼ÒÄÏÀÇ Åë½Å ½ºÅ¸ÀÏÀº ¼ÒÄÏÀ¸·Î µ¥ÀÌÅ͸¦ º¸³»°í ¹Þ´Â À¯Àú·¹º§ ±¸¹®À» Á¤ÀÇÇÑ ´Ù. Åë½Å ½ºÅ¸ÀÏÀ» ¼±ÅÃÇÏ´Â °ÍÀº ´ÙÀ½°ú °°Àº Áú¹®ÀÇ ÀÀ´äÀÌ µÈ´Ù.

o µ¥ÀÌÅÍ Àü¼ÛÀÇ ´ÜÀ§´Â ¹«¾ùÀΰ¡?

¾î¶² Åë½Å ½ºÅ¸ÀÏÀº Å« ±¸Á¶Ã¼¸¦ °¡ÁöÁö ¾Ê´Â, ¹ÙÀÌÆ®ÀÇ ¿­·Î µÈ´Ù. ; ´Ù¸¥ °ÍµéÀº (ÆÐŶ°°Àº) ·¹ÄÚ µå ¾È¿¡ ¹ÙÀÌÆ®¸¦ ¹­¾î ³õ´Â´Ù.

o º¸Åë ÀÛ¾÷À» ÇÏ´Â µ¿¾È¿¡ µ¥ÀÌÅ͸¦ ÀÒ¾î ¹ö¸±¼ö ÀÖ³ª?

¾î¶² Åë½Å ½ºÅ¸ ÀÏ¿¡¼­ º¸³»Áø µ¥ÀÌÅͰ¡ (½Ã½ºÅÛÀ̳ª ³×Æ®¿öÅ© Ãæµ¹À» Á¦¿ÜÇϰí) º¸³»Áø ¼ø¼­´ë·Î ¸ðµÎ µµ´ÞÇØ¾ß ÇÑ´Ù. ; ´Ù¸¥ ½ºÅ¸ÀÏÀº ¶§·Î´Â º¸Åë µ¿À۽ÿ¡µµ µ¥ÀÌÅ͸¦ ÀÒ¾î ¹ö¸®°Å³ª, Çϳª ÀÌ»ó ÀÇ °°Àº ÆÐŶÀÌ Àü´ÞµÉ¼öµµ ÀÖ°í, ¼ø¼­°¡ µÚ¹Ù²ð¼öµµ ÀÖ´Ù.

½Å·ÚÀÖ´Â Åë½Å½ºÅ¸ÀÏÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» ¼³°èÇÏ´Â °ÍÀº º¸Åë µ¥ÀÌÅÍ ¼Õ½ÇÀ̳ª, ¼ø¼­°¡ µÚ¹Ù ²î´Â °ÍÀ» °ËÃâÇϰí Çʿ信 µû¶ó ÀçÀü¼ÛÇÏ´Â ´ëÃ¥À» Æ÷ÇÔÇÑ´Ù.

o »ó´ëÃø°ú ¿ÏÀüÇÑ Åë½ÅÀ» ÇÏ´À³Ä?

¾î¶² Åë½Å½ºÅ¸ÀÏÀº ÀüÈ­ °Å´Â °Í¿Í °°ÀÌ »ó´ëÃø°ú ¿ø°Ý ¼ÒÄÏ ¿¬°áÀ» ¸¸µé°í³ª¼­, ÀÚÀ¯·Ó°Ô µ¥ÀÌ Å͸¦ ±³È¯ÇÑ´Ù.; ´Ù¸¥ ½ºÅ¸ÀÏÀº ÆíÁö ¾²´Â °Íó·³ ´ç½ÅÀÌ º¸³»°íÀÚÇÏ´Â ¸Þ½ÃÁöÀÇ ÁÖ¼Ò¸¦ ½á¼­ º¸³½ ´Ù.

´ç½ÅÀº ¶ÇÇÑ ¼ÒÄÏÀÇ À̸§°ø°£¿¡¼­ À̸§À» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ¼ÒÄÏÀ̸§("ÁÖ¼Ò")´Â ƯÁ¤ÇÑ À̸§°ø°£ÀÇ ÀÇ ¹Ì½ÉÀåÇÑ ³»¿ëÀÌ ÀÖ´Ù. À̸§°ø°£Àº ¶ÇÇÑ "µµ¸ÞÀÎ"À̶ó°í ºÒ¸°´Ù. ±×·¯³ª, ¿ì¸®´Â °°Àº ¿ë¾îÀÇ ´Ù¸¥ »ç¿ë°ú È¥µ·ÇÒ ¼ö ÀÖ¾î ±× ¸»À» ÇÇÇϰڴÙ. °¢ À̸§°ø°£Àº 'PF_'·Î ½ÃÀÛÇÏ´Â »ó¡ÀûÀÎ À̸§À» °¡ Áø´Ù. 'AF_'·Î ½ÃÀÛÇÏ´Â À¯»çÇÑ »óÁ÷Àû À̸§Àº ±× À̸§°ø°£¿¡ ÁÖ¼Ò Æ÷¸ËÀ» °¡¸®Å²´Ù.

¸¶Áö¸·À¸·Î, ´ç½ÅÀº Åë½ÅÀ» Á¦°øÇÏ´Â ÇÁ·ÎÅäÄÝÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ÇÁ·ÎÅäÄÝÀº µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ´Â µ¥ »ç¿ëµÇ´Â Àú¼öÁØ ¸ÞÄ«´ÏÁòÀ» ¸»ÇÑ´Ù. °¢ ÇÁ·ÎÅäÄÝÀº ƯÁ¤ÇÑ À̸§°ø°£°ú Åë½Å½ºÅ¸ÀÏ¿¡ ´ëÇÏ¿© À¯È¿ÇÏ´Ù.; À̸§°ø°£Àº Á¾Á¾ ÇÁ·ÎÅäÄÝ ÆÐ¹Ð¸®¶ó°í ºÒ¸®¿î´Ù. ¿Ö³ÄÇϸé À̸§ °ø°£ÀÌ 'PF_'·Î ½ÃÀÛ

Çϱ⠶§¹®ÀÌ´Ù.

ÇÁ·ÎÅäÄÝÀÇ ±ÔÄ¢Àº ºñ·Ï ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ÀÏÁö¶óµµ µÎ ÇÁ·Î±×·¥°£ÀÇ µ¥ÀÌÅÍ Àü¼ÛÀ» Á¦°øÇÑ´Ù. ÀÌ·¯ ÇÑ ±ÔÄ¢ÀÇ ´ëºÎºÐÀº ¿î¿µÃ¼Á¦¿¡ ÀÇÇÏ¿© ´Ù·ç¾îÁö°í, ´ç½ÅÀÌ ±×°Í¿¡ ´ëÇØ ¾Ë ÇÊ¿ä´Â ¾ø´Ù. ´ç½ÅÀÌ ÇÁ ·ÎÅäÄÝ¿¡ ´ëÇÏ¿© ¾Ë¾Æ¾ß ÇÒ °ÍÀº À̰ÍÀÌ´Ù.:

o µÎ ¼ÒÄϰ£ÀÇ Åë½ÅÀ» À§ÇÏ¿©, ±×°ÍµéÀº ¹Ýµå½Ã °°Àº ÇÁ·ÎÅäÄÝÀ» ³ªÅ¸³»¾ß ÇÑ´Ù.

o °¢ ÇÁ·ÎÅäÄÝÀº ƯÁ¤ÇÑ ½ºÅ¸Àϰú À̸§°ø°£ °áÇÕ¿¡ Àǹ̸¦ °¡Áö¸ç, Àû´çÇÏÁö ¾ÊÀº °áÇÕÀÇ »ç¿ëÀº ÇÒ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î TCP ÇÁ·ÎÅäÄÝÀº ¹ÙÀÌÆ® ½ºÆ®¸² ½ºÅ¸ÀÏÀÇ Åë½Å°ú ÀÎÅÍ³Ý À̸§°ø°£¿¡ ¸ÂÃß¾îÁ® ÀÖ´Ù.

o ½ºÅ¸Àϰú À̸§°ø°£ÀÇ °¢ Á¶ÇÕ¿¡¼­ ÇÁ·ÎÅäÄÝ ¹øÈ£¸¦ 0À¸·Î ³ªÅ¸³»¾î ¿ä±¸ÇÏ¸é ±×°ÍÀº ±âº»ÇÁ·ÎÅä ÄÝ(µðÆúÆ® ÇÁ·ÎÅäÄÝ)·Î µÈ´Ù. ±×¸®°í, ´ç½ÅÀº º¸Åë ÇÏ´Â °Í(µðÆúÆ®¸¦ »ç¿ëÇÏ´Â °Í)ÀÌ ÀÌ·± °ÍÀÌ´Ù.

11.2 Åë½Å½ºÅ¸ÀÏ

GNU¶óÀ̺귯¸®´Â °¢±â ´Ù¸¥ Ư¼ºÀ» Áö´Ñ ¸î Á¾·ùÀÇ ¼ÒÄÏÀ» Áö¿øÇϰí ÀÖ´Ù. ÀÌ Àý¿¡¼­´Â Áö¿øµÇ ´Â ¼ÒÄÏ ÇüŸ¦ ¼­¼úÇÑ´Ù. ¿©±â ³ªÅ¸³­ ½Éº¼¸¯ »ó¼ö´Â 'sys/socket.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

int SOCK_STREAM Macro

SOCK_STREM½ºÅ¸ÀÏÀº ÆÄÀÌÇÁ¿Í °°´Ù. (10Àå[ÆÄÀÌÇÁ¿Í FIFO]À» º¸¶ó, 145ÆäÀÌÁö); ±×°ÍÀº ƯÁ¤ÇÑ ¿ø°Ý ¼ÒÄϰúÀÇ ¿¬°áÈÄ¿¡ µ¿ÀÛÇÑ´Ù. ±×¸®°í ¹ÙÀÌÆ®ÀÇ ½ºÆ®¸²Ã³·³ ½Å·Ú¼º ÀÖ´Â µ¥ÀÌÅÍ Àü¼ÛÀ» ÇÑ´Ù. ÀÌ ½ºÅ¸ÀÏÀÇ »ç¿ëÀº 11.8Àý[¿¬°á 166ÆäÀÌÁö]¿¡ ÀÚ¼¼È÷ ³ª¿Í ÀÖ´Ù.

int SOCK__DGRAM Macro

SOCK_DGRAM ½ºÅ¸ÀÏÀº °³º°ÀûÀ¸·Î ÁÖ¼Ò°¡ ¾²¿©Áø ÆÐŶÀ» Àü´ÞÇϴµ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº SOCK_STREAM°ú Á¤¹Ý´ëÀÌ´Ù. ´ç½ÅÀÌ ÀÌ Á¾·ùÀÇ ¼ÒÄÏ¿¡ µ¥ÀÌÅ͸¦ ½á³Ö´Â´Ù. ±×·¯¸é ±× µ¥ÀÌÅÍ´Â ÇϳªÀÇ ÆÐŶÀÌ µÈ´Ù. SOCK_DGRAM ¼ÒÄÏÀº ¿¬°áÀ» °¡ÁöÁö ¾Ê´Â´Ù. ´ç½ÅÀº °¢ ÆÐŶ¿¡ ¹Ýµå½Ã ¹Ýº¹ ÀûÀ¸·Î ÁÖ¼Ò¸¦ ½á³Ö¾î¾ß ÇÑ´Ù. µ¥ÀÌÅ͸¦ Àü¼ÛÇϰíÀÚ ÇÏ´Â ´ç½ÅÀÇ ¿ä±¸¿¡ °üÇÏ¿© ½Ã½ºÅÛÀÇ Ã¥ÀÓÀº,

°¢ ÆÐŶÀÌ °¡Àå Àß ¹è´ÞµÉ ¼ö ÀÖµµ·Ï ½ÃµµÇÏ´Â °ÍÀÌ´Ù. ±×°ÍÀº ³× ¹øÂ°¿Í ´Ù¼¸ ¹øÂ° ½ÇÆÐ ÈÄ¿¡ ¿©¼¸ ¹øÂ°¿¡ ¼º°øÇÒ ¼ö ÀÖ´Ù.; Àϰö ¹øÂ° ÆÐŶÀº ¿©¼¸ ¹øÂ° Àü¿¡ µµÂøµÉ ¼öµµ ÀÖ´Ù. ±×¸®°í ¿©¼¸ ¹øÂ° ÈÄ ¿¡ µÎ ¹ø µµÂøÇÒ ¼öµµ ÀÖ´Ù. SOCK_DGRAMÀº ÀϹÝÀûÀ¸·Î ÀÀ´äÇØ¾ßÇÒ ½Ã°£³»¿¡ ÀÀ´äÀÌ ¾øÀ»¶§ °£´ÜÈ÷ ÆÐŶÀ» ÀçÀü¼ÛÇϴµ¥ ÀûÇÕÇÏ´Ù. µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀ» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â 11.9 Àý[µ¥ÀÌÅͱ׷¥],176ÂÊÀ» º¸¶ó

int SOCK__RAW Macro

ÀÌ ½ºÅ¸ÀÏÀº Àú¼öÁØ ³×Æ®¿öÅ© ÇÁ·ÎÅäÄݰú ÀÎÅÍÆäÀ̽º¸¦ ¾ï¼¼½ºÇϵµ·Ï ÇØ ÁØ´Ù. º¸Åë »ç¿ëÀÚ ÇÁ·Î±× ·¥Àº ÀÌ ½ºÅ¸ÀÏÀ» ÀÚÁÖ »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù.

11.3 ¼ÒÄÏ ÁÖ¼Ò

¼ÒÄÏÀÇ À̸§Àº º¸Åë "ÁÖ¼Ò"¶ó°í ºÒ¸®¿î´Ù. ¼ÒÄÏÁÖ¼Ò¿Í °ü°èµÈ ±âÈ£(symbol)¿Í ÇÔ¼öµéÀº, ¶§ ¶§·Î "À̸§"À̶ó´Â ¸»À̳ª "ÁÖ¼Ò"¸¦ »ç¿ëµÇ¾î, ¾î¶² ±ÔÄ¢ ¾øÀÌ À̸§ Áö¾îÁø´Ù. ´ç½ÅÀº ¼ÒÄÏÀÌ °í·Á µÇ´Â °÷¿¡ ÀÌ·¯ÇÑ ¸»À» µ¿ÀÏÇÑ °Íó·³ »ý°¢ÇÒ ¼ö ÀÖ´Ù. socketÇÔ¼ö·Î »õ·Ó°Ô ¸¸µç ¼ÒÄÏÀº ÁÖ¼Ò¸¦ °¡ÁöÁö ¾Ê´Â´Ù. ´ç½ÅÀÌ ±×°Í¿¡°Ô ÁÖ¼Ò¸¦ ÁÖ¾î¾ß¸¸, ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Åë½ÅÀ» À§ÇÑ ÁÖ¼Ò¸¦ ãÀ»¼ö ÀÖ °Ô µÈ´Ù. À̰ÍÀ» ÁÖ¼Ò¸¦ ¼ÒÄÏ¿¡ ¹­´Â´Ù°í Çϰí, bindÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. ¸¸¾à ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ÁÖ¼Ò À» ã°í, ÁÖ¼Ò¸¦ ÀÌ¿ëÇÏ¿© Åë½ÅÀ» ½ÃÀÛÇÏ´Â °ÍÀ̶ó¸é, ´ç½ÅÀº ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ »ý°¢ÇØ º¼ Çʿ䰡 ÇÑ ´Ù. ´ç½ÅÀº ´Ù¸¥ ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ±Ô¸íÇÒ ¼ö ÀÖÁö¸¸, ±×°ÍÀº º¸Åë ¹«ÀǹÌÇÏ´Ù; óÀ½, ¼ÒÄÏÀ¸·ÎºÎÅÍ µ¥ ÀÌÅ͸¦ º¸³»°Å³ª ¿¬°áÀ» ÃʱâÈ­Çϱâ À§ÇØ ±×°ÍÀ» »ç¿ëÇÒ ¶§, ¸¸¾à ±¸Ã¼ÀûÀ¸·Î ³ªÅ¸³»Áø °ÍÀÌ ¾ø´Ù ¸é, ½Ã½ºÅÛÀº ÁÖ¼Ò¸¦ ÀÚµ¿À¸·Î ¼³Á¤ÇÑ´Ù.

¼­¹ö´Â ÁÖ¼Ò¿¡ ±âÃÊÇÏ¿© ÆÇº¯µÇ±â ¶§¹®¿¡, º¸Åë Ŭ¶óÀÌ¾ðÆ®´Â ÁÖ¼Ò¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.; ¿¹¸¦ µé ¾î, rsh¿Í rlogin ÇÁ·ÎÅäÄÝÀº Ŭ¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏÁÖ¼Ò¸¦ »ìÇǰí, ¸¸¾à ±×°ÍÀÌ IPPORT_RESERVEDº¸ ´Ù ÀÛÁö ¾Ê´Ù¸é, ¾ÏÈ£°Ë»ç¸¦ °ÅÃÄ¾ß ÇÑ´Ù. (11.5.3ÀýÀÇ [Æ÷Æ®],159ÂÊÀ» º¸¶ó)

¼ÒÄÏÁÖ¼ÒÀÇ ÀÚ¼¼ÇÑ °ÍÀº ´ç½ÅÀÌ »ç¿ëÇÏ´Â ¾î¶² À̸§°ø°£¿¡ ÀÇÁ¸ÇÏ¿© º¯ÇÑ´Ù. ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§ ÇØ¼­´Â 11.4Àý [ÆÄÀÏ À̸§°ø°£] (153ÂÊ)À» º¸°Å³ª, 11.5Àý [ÀÎÅÍ³Ý À̸§°ø°£] (155ÂÊ)À» º¸¶ó. À̸§°ø °£¿¡ »ó°ü¾øÀÌ , ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ¼¼Æ®ÇÏ°í »ç¿ëÇϱâ À§ÇØ ´ç½ÅÀº °°Àº bind¿Í getsocknameÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµéÀº ÁÖ¼Ò¸¦ ¹Þ¾ÆµéÀ̱â À§ÇØ struct sockaddr *¶ó´Â À§Á¶ ÀÚ·áÇü(phony data type)À» »ç¿ëÇÑ´Ù. ½ÇÁ¦ÀûÀ¸·Î, ÁÖ¼Ò´Â ´ç½ÅÀÌ »ç¿ëÇÏ´Â ÁÖ¼ÒÆ÷¸Ë°ú´Â ´Ù¸¥ ÀÚ·áÇüÀÇ ±¸Á¶·Î µÇ¾î ÀÖ ´Ù. ±×·¯³ª, ´ç½ÅÀº ±×°ÍÀ» bindÇϱâ À§ÇØ ³Ñ°ÜÁÙ ¶§, ±×°ÍÀÇ ÁÖ¼Ò¸¦ struct sockaddr *·Î ÀÚ·áÇüº¯È¯ (cast)À» ÇØÁÖ¾î¾ß ÇÑ´Ù.

11.3.1 ÁÖ¼Ò Æ÷¸Ë

bind¿Í getsocknameÇÔ¼ö´Â ¼ÒÄÏÀÇ ÁÖ¼ÒÀÇ Æ÷ÀÎÅ͸¦ ÀǹÌÇÏ´Â struct sockaddr *À̶ó´Â ÀÏ¹Ý ÀûÀÎ ÀÚ·áÇüÀ» »ç¿ëÇÑ´Ù. ´ç½ÅÀº ÁÖ¼Ò¸¦ ¹ø¿ªÇϰųª ¸¸µé±â À§ÇØ ÀÌ ÀÚ·áÇüÀ» È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ¾ø´Ù; ´ë½Å, ¼ÒÄÏÀÇ À̸§°ø°£À» À§ÇÑ ÀÚ·áÇüÀ» »ç¿ëÇØ¾ß¸¸ ÇÑ´Ù. ±×·¯¹Ç·Î, º¸Åë ½ÇÁ¦ÀûÀÎ »ç¿ëÀº Àû ÇÕÇÑ À̸§°ø°£ÀÇ ÇüÅÂÀÇ ÁÖ¼Ò¸¦ ¸¸µå´Âµ¥ »ç¿ëÇÏ°í³ª¼­, bind³ª getsocknameÀ» È£ÃâÇÒ ¶§ struct sockaddr *·Î Æ÷ÀÎÅÍÇüŸ¦ º¯È¯ÇÑ´Ù. ´ç½ÅÀÌ struct sockaddr ÀÚ·áÇüÀ¸·ÎºÎÅÍ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸ Áß Çϳª´Â, ÁÖ¼Ò¸¦ ¿ÏÀüÈ÷ ÀÌÇØÇϱâ À§ÇØ »ç¿ëµÇ´Â ÀÚ·áÇüÀÌ ¾î¶² °ÍÀÎÁö ¾Ë·ÁÁÖ´Â "ÁÖ¼Ò Æ÷¸Ë" ÁöÁ¤ÀÚÀÌ´Ù. ÀÌ Àý¿¡¼­ÀÇ ±âÈ£´Â 'sys/socket.h'¶ó´Â Çì´õÆÄÀϾȿ¡ Á¤ÀǵǾî ÀÖ´Ù.

struct sockaddr ÀÚ·áÇü

struct sockaddrÇü ÀÚü´Â ´ÙÀ½ ¸â¹ö¸¦ °¡Áö°í ÀÖ´Ù:

short int sa_family

À̰ÍÀº ÀÌ ÁÖ¼ÒÀÇ ÁÖ¼Ò Æ÷¸Ë¿ë ÄÚµåÀÌ´Ù. ±×°ÍÀº ´ÙÀ½¿¡ ³ª¿À´Â µ¥ÀÌÅÍÀÇ Æ÷¸ËÀ» Áö½ÃÇÑ´Ù.

char sa_data[14]

À̰ÍÀº ½ÇÁ¦ÀûÀÎ ¼ÒÄÏÁÖ¼Ò µ¥ÀÌÅÍÀÌ´Ù. À̰ÍÀº Æ÷¸Ë¿¡ ÀÇÁ¸ÇÑ´Ù. ±×°ÍÀÇ ±æÀÌ´Â ¶ÇÇÑ Æ÷¸Ë¿¡ ÀÇÁ¸ÇÏ °í ¾Æ¸¶ 14º¸´Ù Ŭ °ÍÀÌ´Ù. sa_dataÀÇ 14¶ó´Â ±æÀÌ´Â ¿ø·¡ º¯ÇÒ ¼ö ÀÖ´Ù. °¢ ÁÖ¼ÒÆ÷¸ËÀº AF_·Î ½Ã ÀÛÇÏ´Â ±âÈ£À̸§À¸·Î ½ÃÀ۵ȴÙ. ±×°ÍµéÀº °¢°¢ À̸§°ø°£¿¡ ´ëÀÀµÇ´Â 'PF_' ±âÈ£¿¡ ¸ÂÃçÁ® ÀÖ´Ù.

AF_FILE

À̰ÍÀº ÆÄÀÏ À̸§°ø°£¿¡ ¸Â´Â ÁÖ¼ÒÆ÷¸ËÀÌ´Ù. (PF_FILEÀº ÀÌ À̸§°ø°£ÀÇ À̸§ÀÌ´Ù.) ÀÌ ÁÖ¼Ò Æ÷ ¸ËÀÇ Á¤º¸¸¦ º¸·Á¸é 11.4.2Àý [ÆÄÀÏ À̸§°ø°£ ±¸Ã¼Àû ³»¿ë], 153ÂÊÀ» º¸¶ó.

AF_UNIX

À̰ÍÀº ȣȯ¼ºÀ» À§ÇÑ AF_FILE°ú °°Àº¸»ÀÌ´Ù. (PF_UNIX´Â PF_FILE°ú ¿ª½Ã µ¿ÀǾîÀÌ´Ù.)

AF_INET

À̰ÍÀº ÀÎÅÍ³Ý À̸§°ø°£¿¡ ¸Â´Â ÁÖ¼ÒÆ÷¸ËÀÌ´Ù. (PF_INETÀº ÀÌ À̸§°ø°£ÀÇ À̸§ÀÌ´Ù.) 11.5.1Àý [ÀÎÅÍ ³Ý ÁÖ¼Ò Æ÷¸Ë], 155ÂÊÀ» º¸¾Æ¶ó.

AF_UNSPEC

À̰ÍÀº ƯÁ¤ÇÑ ÁÖ¼ÒÆ÷¸ËÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù. ±×°ÍÀº "¿¬°áµÈ" µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀÇ ±âº»(default)¸ñÀû Áö ÁÖ¼Ò¸¦ Áö¿ì´Â °Í °°Àº µå¹® °æ¿ì¿¡¸¸ »ç¿ëµÈ´Ù. 11.9.1Àý[µ¥ÀÌÅͱ׷¥ º¸³»±â],176ÂÊÀ» º¸¾Æ¶ó. ¿© ±â¿¡ ¸Â´Â À̸§ °ø°£ÁöÁ¤ÀÚ ±âÈ£µµ ¿ÏÀü¼ºÀ» À§ÇØ Á¸ÀçÇÑ´Ù. ±×·¯³ª, ±×°ÍÀ» ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù.

'sys/socket.h'

¿¡¼­ ´ëºÎºÐ ½ÇÁ¦·Î ±¸ÇöµÇÁö ¾ÊÀº ¸¹Àº ´Ù¸¥ Á¾·ùÀÇ ³×Æ®¿öÅ©¿¡ 'AF_'·Î ½ÃÀÛÇÏ´Â ±âÈ£¸¦ Á¤ÀÇÇÏ °í ÀÖ´Ù. ¾î¶»°Ô ±×°ÍÀ» »ç¿ëÇÏ´Â °Í¿¡ °üÇÑ Á¤º¸¸¦ ¿ì¸®°¡ ¹ÞÀ¸¸é, ¿ì¸®´Â ±×°ÍÀ» Á¤¸»·Î ¹®¼­È­ÇÒ °ÍÀÌ´Ù.

11.3.2 ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ¼¼ÆÃÇϱâ.

¼ÒÄÏ¿¡ ÁÖ¼Ò¸¦ ÇÒ´çÇϱâ À§ÇÏ¿© bindÇÔ¼ö¸¦ »ç¿ëÇ϶ó. bindÀÇ ÇÁ·ÎÅäŸÀÔÀº 'sys/socket.h'Çì´õÆÄÀÏ ¿¡ ÀÖ´Ù. »ç¿ë¿¹´Â 11.4Àý[ÆÄÀÏ À̸§°ø°£], 153ÂÊ, ¶Ç´Â 11.5.7Àý[Inet ¿¹Á¦], 163ÂÊÀ» º¸¶ó.

int bind (int socket, struct sockaddr *addr, size_t length) Function

bindÇÔ¼ö´Â "socket"¼ÒÄÏ¿¡ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. addr°ú lengthÀμö´Â ÁÖ¼Ò¸¦ ±¸Ã¼È­ÇÑ´Ù. ÀÚ¼¼ÇÑ ÁÖ¼ÒÆ÷ ¸ËÀº À̸§°ø°£¿¡ ÀÇÁ¸ÇÑ´Ù. ÁÖ¼ÒÀÇ Ã¹ ¹øÂ° ºÎºÐÀº Ç×»ó Æ÷¸ËÁöÁ¤ÀÚÀÌ´Ù. Æ÷¸ËÁöÁ¤ÀÚ´Â À̸§°ø°£À» ¸í½ÃÇϰí, ±× ÁÖ¼Ò°¡ ±× À̸§°ø°£ÀÇ Æ÷¸ËÀÇ ÁÖ¼ÒÀÓÀ» ¸»ÇÑ´Ù. ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, ½ÇÆÐÇϸé -1 À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀǵǾî ÀÖ´Â errno ¿¡·¯ Á¶°ÇÀÌ´Ù.

EBADF

¼ÒÄÏ Àμö°¡ À¯È¿ÇÏÁö ¾ÊÀº ÆÄÀÏ ÁöÁ¤ÀÚÀÌ´Ù.

ENOTSOCK

¼­¼úÀÚ socketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EADDRNOTAVAIL

Áö½ÃµÈ ÁÖ¼Ò°¡ ÀÌ ÀåÄ¡¿¡¼­´Â À¯È¿ÇÏÁö ¾Ê´Ù.

EADDRINUSE

¶Ç ´Ù¸¥ ¼ÒÄÏÀÌ ÀÌ ÁÖ¼Ò·Î ÀÌ¹Ì »ç¿ëµÇ°í ÀÖ´Ù.

EINVAL

socket¼ÒÄÏÀÌ ÀÌ¹Ì ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Ù.

EACCESS

´ç½ÅÀº ¿ä±¸µÈ ÁÖ¼Ò¸¦ Á¦¾îÇÒ Çã°¡±ÇÀ» °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù. (ÀÎÅÍ³Ý µµ¸ÞÀο¡¼­, ´ÜÁö ½´ÆÛÀ¯ Àú¸¸ÀÌ 0¿¡¼­ IPPORT_RESERVED-1±îÁö ¹üÀ§ÀÇ Æ÷Æ®³Ñ¹ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. 11.5.3Àý[ports] (159 ÂÊ)À» º¸¶ó. )

Ãß°¡ÀûÀÎ Á¶°ÇÀº ¼ÒÄÏÀÇ °¢°¢ À̸§°ø°£¿¡ ÀÇÁ¸ÇÑ´Ù.

11.3.3 ¼ÒÄÏÀÇ ÁÖ¼Ò Àбâ

getsocknameÇÔ¼ö¸¦ »ç¿ëÇÏ¿©, ÀÎÅÍ³Ý ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀº 'sys/socket.h'¶ó´Â Çì´õÆÄÀÏ¿¡ ÀÖ´Ù.

int getsockname (int socket, struct sockaddr *addr, size_t *length_ptr) ÇÔ¼ö

getsocknameÇÔ¼ö´Â addr°ú length_ptr Àμö·Î ¸í½ÃµÇ´Â °÷ÀÇ socketÀ̶ó´Â ¼ÒÄÏÀÇ ÁÖ¼Ò¿¡ °üÇÑ Á¤ º¸¸¦ ¸®ÅÏÇÑ´Ù. length_ptrÀº Æ÷ÀÎÅÍÀÓÀ» ÁÖ¸ñÇ϶ó; ´ç½ÅÀÌ addrÀÇ Å©±â ÇÒ´çÀ» ÃʱâÈ­ÇÒ °ÍÀÌ´Ù. ´ç½ÅÀº addrÀÇ ÇÒ´çÅ©±â¸¦ ÃʱâÈ­ ÇÒ °ÍÀ̰í, ÁÖ¼Òµ¥ÀÌÅÍÀÇ ½ÇÁ¦Å©±â¸¦ Æ÷ÇÔÇÑ °ÍÀÌ ¸®Å쵃 °ÍÀÌ´Ù.

ÁÖ¼Òµ¥ÀÌÅÍÀÇ Æ÷¸ËÀº ¼ÒÄÏ À̸§°ø°£¿¡ ÀÇÁ¸ÇÑ´Ù. Á¤º¸ÀÇ ±æÀÌ´Â ÁÖ¾îÁø À̸§°ø°£¿¡ º¸Åë ¸ÂÃß¾îÁø ´Ù. ±×·¡¼­, º¸Åë ´ç½ÅÀº ÇÊ¿äÇÑ °ø°£ÀÌ Á¤È®È÷ ¾ó¸¶ÀÎÁö ¾Ë ¼ö ÀÖ°í, ±×°Í¸¸Å­ Á¦°øÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ÀûÀÎ »ç¿ëÀº ¼ÒÄÏÀÇ À̸§°ø°£¿¡ ÀûÇÕÇÑ ÀÚ·áÇüÀ» »ç¿ëÇÏ´Â °ªÀ¸·Î °ø°£À» ÇÒ´çÇÏ°í ³ª¼­, ±×°Í À» getsocknameÀ¸·Î ³Ñ±â±â À§ÇØ ±× ÁÖ¼Ò¸¦ struct sockaddr*·Î Çüº¯È¯(cast)ÇÑ´Ù.

¸®Åϰª 0Àº ¼º°øÀ̰í, -1Àº ¿¡·¯ÀÌ´Ù. ´ÙÀ½ ¿¡·¯Á¶°ÇÀº ÀÌ ÇÔ¼ö¿¡¼­ Á¤ÀÇµÈ °ÍÀÌ´Ù.

EBADF

¼ÒÄÏÀμö°¡ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK

¼­¼úÀÚ socketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

ENOBUFS

µ¿ÀÛÀ» ¼öÇàÇÒ¸¸ÇÑ ÃæºÐÇÑ ¹öÆÛ°¡ ¾ø´Ù.

´ç½ÅÀº À̸§°ø°£ÀÇ ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ÀÐÀ» ¼ö ¾ø´Ù. À̰ÍÀº ½Ã½ºÅÛÀÇ ³ª¸ÓÁö »çÇ׿¡ ÀÏÄ¡ÇÑ´Ù; ÀϹÝÀû À¸·Î, ±× ÆÄÀÏÀÇ ¼­¼úÀڷκÎÅÍ ÆÄÀÏÀÇ À̸§À» ¾ò¾î³¾ ¹æ¹ýÀº ¾ø´Ù.

11.4 The File Namespace

ÀÌ ºÎºÐÀº »ó¡ÀûÀÎ À̸§(¼ÒÄÏÀ» ¸¸µé ¶§ ¿ä±¸ÇÏ´Â) Àº PF_FILEÀ̶ó´Â ÆÄÀÏ À̸§°ø°£¿¡ ´ëÇØ »ó¼¼ È÷ ¼³¸íÇÑ´Ù.

11.4.1 ÆÄÀÏ À̸§°ø°£ °³³äµé

ÆÄÀÏÀ̸§°ø°£¿¡¼­, ¼ÒÄÏ ÁÖ¼Ò´Â ÆÄÀÏ À̸§µéÀÌ´Ù. ´ç½ÅÀº ¼ÒÄÏÀÇ ÁÖ¼Òó·³ ´ç½ÅÀÌ ¿øÇÏ´Â ¾î¶² ÆÄ ÀÏ À̸§À» ¸í½ÃÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ´ç½ÅÀº ¹Ýµå½Ã ±×°ÍÀ» Æ÷ÇÔÇÏ´Â µð·ºÅ丮¿¡ ¾²±â Çã°¡¸¦ °¡Áö °í ÀÖ¾î¾ß ÇÑ´Ù. ¼ÒÄÏ¿¡ ¿¬°áÇϱâ À§ÇØ, ´ç½ÅÀº ±×°Í¿¡ ´ëÇÑ Àбâ Çã°¡µµ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. º¸Åë /tmpµð·ºÅ丮 ¾È¿¡ ±×·¯ÇÑ ÆÄÀϵéÀ» ³Ö´Â´Ù.

ÆÄÀÏÀ̸§°ø°£ÀÇ Æ¯º°ÇÑ Á¡ Çϳª´Â ¿¬°áÀ» ÇÒ ¶§ ±× À̸§ÀÌ ÇÑ ¹ø¸¸ »ç¿ëµÈ´Ù´Â °ÍÀÌ´Ù. Áï, ±×°Í À» ÇÑ ¹ø »ç¿ëÇÏ°í ³ª¸é, ±× ÁÖ¼Ò´Â Àǹ̰¡ ¾ø°í, Á¸ÀçÇÏÁö ¾ÊÀ»Áöµµ ¸ð¸¥´Ù.

¶Ç ´Ù¸¥ Ư¡Àº ¸¸¾à ¼ÒÄÏÀÇ À̸§À» Æ÷ÇÔÇÏ´Â ÆÄÀϽýºÅÛÀ» ´Ù¸¥ ±â±â°¡ °øÀ¯ÇÏÁö ¾Ê´Â´Ù¸é ´Ù ¸¥ ±â±âÀÇ ¾î¶² ¼ÒÄÏÀ¸·Î ¿¬°áÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ´ç½ÅÀº µð·ºÅ丮 ¸®½ºÆ® ¾È¿¡¼­ ¼ÒÄÏÀ» º¼ ¼ö ÀÖÀ¸³ª, ±×°Í¿¡ ¿¬°áÇÏ´Â °ÍÀº ºÒ°¡´É ÇÏ´Ù. ¾î¶² ÇÁ·Î±×·¥µéÀº Ŭ¶óÀÌ¾ðÆ®°¡ ÀÚ±â ÇÁ·Î¼¼½º ID¸¦ º¸³»µµ·Ï ¿ä±¸ÇÏ´Â °Í°ú ÇÁ·Î¼¼½ºID¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ® °£À» ½Äº°ÇÏ´Â °ÍÀ» ÀÌ¿ëÇÏ´Â °Í µîÀ» ÀÌ¿ëÇÑ´Ù. ±×·¯³ª, ¿ì¸®´Â ´ç½ÅÀÌ ¼³°èÇÏ´Â ÇÁ·ÎÅäÄÝµé ¾È¿¡¼­ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¸»±â¸¦ ¿øÇÑ´Ù. ¿ì¸®´Â °°Àº ÆÄÀϽýºÅÛÀ» »ç¿ëÇÏ´Â ´Ù¸¥ ±â±â·Î ºÎÅÍÀÇ ¿¬°áµéÀ» Çã¶ôÇØ¾ß ÇÒÁöµµ ¸ð¸£±â ¶§¹®ÀÌ ´Ù. ´ë½Å¿¡, ¸¸¾à ±×°ÍÀ» °¡Áö´Â °ÍÀ» ¿øÇÑ´Ù¸é, °¢ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ½Äº°¹øÈ£¸¦ º¸³½´Ù.

ÆÄÀÏ À̸§°ø°£¾ÈÀÇ ¼ÒÄÏÀ» ´ÝÀº ÈÄ¿¡, ´ç½ÅÀº ÆÄÀϽýºÅÛÀ¸·ÎºÎÅÍ ÆÄÀÏÀ̸§À» Áö¿ö¾ß ÇÑ´Ù. unlink ³ª remove¸¦ »ç¿ëÇÏ¿© À̰ÍÀ» Ç϶ó. 9.5Àý [ÆÄÀÏ »èÁ¦Çϱâ], 129ÂÊÀ» º¸¶ó.

ÆÄÀÏ À̸§°ø°£Àº ´ÜÁö ¾î¶² Åë½Å ½ºÅ¸ÀÏ¿¡ ´ëÇØ ÇϳªÀÇ ÇÁ·ÎÅäÄݸ¸ Áö¿øÇÑ´Ù. ±×°ÍÀº ÇÁ·ÎÅäÄÝ ¹ø È£ 0ÀÌ´Ù.

11.4.2 ÆÄÀÏÀ̸§ °ø°£ÀÇ ÀÚ¼¼ÇÑ °Í

ÆÄÀÏ À̸§ °ø°£¿¡ ¼ÒÄÏÀ» ¸¸µé·Á¸é, socket¶Ç´Â sockerpairÀÇ À̸§°ø°£ Àμö¿¡ »ó¼ö PF_FILEÀ» »ç¿ëÇ϶ó. ÀÌ »ó¼ö´Â 'sys/socket.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

int PF__FILE Macro

À̰ÍÀº ¼ÒÄÏÁÖ¼Ò°¡ ÆÄÀÏÀ̸§ÀÎ ÆÄÀÏÀ̸§ °ø°£°ú ±×°ÍÀÌ ¿¬ÇÕµÈ ÇÁ·ÎÅäÄÝ ÆÐ¹Ð¸®¸¦ °¡¸®Å²´Ù.

int PF__UNIX Macro

À̰ÍÀº ȣȯ¼ºÀ» À§ÇÑ PF_FILEÀÇ µ¿ÀǾîÀÌ´Ù.

ÆÄÀÏÀ̸§°ø°£ÀÇ ¼ÒÄÏÀ̸§À» ¸í½ÃÇÏ´Â ±¸Á¶Ã¼´Â 'sys/un.h'¶ó´Â Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù. :

struct sockaddr__un Data Type

ÀÌ ±¸Á¶Ã¼´Â ÆÄÀÏÀ̸§°ø°£À» ¼ÒÄÏ ÁÖ¼Ò·Î ¸í½ÃÇϴµ¥ »ç¿ëµÈ´Ù.

short int sun_family

À̰ÍÀº ¼ÒÄÏÁÖ¼Ò¸¦ À§ÇÑ Çüųª ÁÖ¼ÒÆÐ¹Ð¸®¸¦ ¸í½ÃÇÑ´Ù. ´ç½ÅÀº ÆÄÀÏÀ̸§°ø°£À» ÁöÁ¤Çϱâ À§ÇÏ¿© AF_FILE°ªÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. 11.3Àý [¼ÒÄÏÁÖ¼Ò], 150ÂÊÀ» º¸¶ó.

char sun_path[108]

À̰ÍÀº »ç¿ëµÇ´Â ÆÄÀÏÀ̸§ÀÌ´Ù.

¹Ì¿Ï¼º: ¿Ö 108ÀÌ ¸ÅÁ÷³Ñ¹öÀΰ¡? RMS´Â À̰ÍÀ» ±æÀ̰¡ 0ÀÎ ¹è¿­À» ¸¸µå´Â °Í°ú ÆÄÀÏÀ̸§ÀÇ ±æÀÌ¿¡ ±âÃÊÇÏ¿© ÀûÇÕÇÑ ÀúÀå°ø°£À» ÇÒ´çÇϱâ À§ÇØ allocate¸¦ »ç¿ëÇÏ´Â °Í°ú °°Àº ¿¹¸¦ ²¿Áý¾î Á¦¾ÈÇÑ ´Ù.

´ç½ÅÀº sun_family¿ä¼ÒÀÇ Å©±â¿Í ÆÄÀÏÀ̸§¹®ÀÚ¿­ÀÇ (ÇÒ´ç Å©±â°¡ ¾Æ´Ñ)¹®ÀÚ¿­ ±æÀÌÀÇ ÇÕÀÎ, ÆÄÀÏÀÌ ¸§°ø°£¿¡ ¼ÒÄÏÁÖ¼Ò¸¦ À§ÇÑ ±æÀÌ ¸Å°³º¯¼ö¸¦ °è»êÇØ¾ß ÇÑ´Ù.

11.4.3 ÆÄÀÏ-À̸§°ø°£ ¼ÒÄÏÀÇ ¿¹

¿©±âÀÖ´Â °ÍÀº ÆÄÀÏÀ̸§°ø°£ÀÇ ¼ÒÄÏÀ» ¸¸µé°í À̸§Áö¾îÁÖ´Â ¹æ¹ýÀ» º¸¿©ÁÖ´Â ¿¹ÀÌ´Ù.

#include <stddef.h>

#include <stdio.h>

#include <errno.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <sys/un.h>

int

make_named_socket (const char *filename)

{

struct sockaddr_un name;

int sock;

size_t size;

/* ¼ÒÄϸ¸µé±â */

sock = socket (PF_UNIX, SOCK_DGRAM, 0);

if (sock < 0)

{

perror ("socket");

exit (EXIT_FAILURE);

}

/* Bind a name to the socket. */

name.sun_family = AF_FILE;

strcpy (name.sun_path, filename);

/* The size of the address is the offset of the start of the filename, plus its length, plus one for the terminating null byte. */

size = (offsetof (struct sockaddr_un, sun_path) + strlen (name.sun_path) + 1);

if ( bind (sock, (struct sockaddr *) &name, size) <0)

{

perror ("bind");

exit (EXIT_FAILURE);

}

return sock;

}

11.5 ÀÎÅÍ³Ý À̸§°ø°£

ÀÌ Àå¿¡¼­´Â ÇÁ·ÎÅäÄݰú ¼ÒÄÏÀÌ ÀÎÅÍ³Ý À̸§°ø°£¿¡¼­ »ç¿ëµÇ´Â À̸§Áþ´Â ¹æ¹ý¿¡ ´ëÇØ ¼­¼úÇÑ´Ù.

ÀÎÅÍ³Ý À̸§°ø°£¿¡¼­ ¼ÒÄÏÀ» ¸¸µé·Á¸é, socketÀ̳ª socketpairÀÇ À̸§ °ø°£Àμö·Î ÀÌ À̸§°ø°£ÀÇ PF_INET±âÈ£¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¸ÅÅ©·Î´Â 'sys/socket.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

int PF__INET Macro

À̰ÍÀº ÀÎÅÍ³Ý À̸§°ø°£À» ÁöÁ¤Çϰí ÇÁ·ÎÅäÄÝÀÇ ¿¬ÇÕµÈ ÆÐ¹Ð¸®¸¦ ÁöÁ¤ÇÑ´Ù.

ÀÎÅÍ³Ý À̸§°ø°£ÀÇ ¼ÒÄÏ ÁÖ¼Ò´Â ´ÙÀ½°ú °°Àº ¼ººÐÀ» Æ÷ÇÔÇÑ´Ù:

o ´ç½ÅÀÌ ¿¬°áÇϱ⠿øÇÏ´Â ÀåÄ¡ÀÇ ÁÖ¼Ò. ÀÎÅÍ³Ý ÁÖ¼Ò´Â ¸î°¡Áö ¹æ¹ýÀ¸·Î Ç¥ÇöµÉ ¼ö ÀÖ´Ù. ; ÀÌ·¯ÇÑ ¹æ¹ýµéÀº 11.5.1Àý [È£½ºÆ® ÁÖ¼Ò] 155ÆäÀÌÁö ¿Í 11.5.2.4Àý [È£½ºÆ® À̸§] 158ÆäÀÌÁö¿¡¼­ ³íÀÇÇÑ´Ù.

o ±× ÀåÄ¡ÀÇ Æ÷Æ® ¹øÈ£. 11.5.3Àý [Æ÷Æ®] 159ÂÊÀ» º¸¶ó

´ç½ÅÀº ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£°¡ ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­¶ó°í ºÒ¸®¿ì´Â Á¤±ÔÈ­ µÈ Æ÷¸ËÀ¸·Î Ç¥ÇöµÈ´Ù´Â °Í À» ¾Ë¾Æ¾ß ÇÑ´Ù. ÀÌ¿¡ °üÇÑ Á¤º¸´Â 11.5.5Àý [¹ÙÀÌÆ® ¼ø¼­] 161ÂÊÀ» º¸¶ó

11.5.1 ÀÎÅÍ³Ý ¼ÒÄÏ ÁÖ¼Ò Æ÷¸Ë

ÀÎÅÍ³Ý À̸§°ø°£¿¡¼­, ¼ÒÄÏÁּҴ ȣ½ºÆ®ÀÇ ÁÖ¼Ò¿Í ±× È£½ºÆ®ÀÇ Æ÷Æ®¸¦ Æ÷ÇÔÇÑ´Ù. Ãß°¡ÀûÀ¸·Î ´ç½Å ÀÌ ¼±ÅÃÇÑ ÇÁ·ÎÅäÄÝÀº ÁÖ¼ÒÀÇ ÀϺκÐó·³ È¿°úÀûÀ¸·Î Á¦°øµÈ´Ù. ¿Ö³ÄÇϸé Áö¿ªÀûÀÎ Æ÷Æ®¹øÈ£´Â ƯÁ¤ÇÑ ÇÁ·ÎÅäÄݾȿ¡¼­ Àǹ̸¦ °¡Áö±â ¶§¹®ÀÌ´Ù. ÀÎÅÍ³Ý À̸§°ø°£¾ÈÀÇ ¼ÒÄÏ ÁÖ¼ÒÀÇ Ç¥Çö¿¡ °üÇÑ ÀÚ ·áÇüÀº 'netinet/in.h' Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù.

struct sockaddr__in Data Type

À̰ÍÀº ÀÎÅÍ³Ý À̸§°ø°£¾ÈÀÇ ¼ÒÄÏÁÖ¼Ò¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÇ´Â ÀÚ·áÇüÀÌ´Ù. ±×°ÍÀº ´ÙÀ½ ¸â¹ö¸¦ °¡Áø ´Ù.

short int sin_family

À̰ÍÀº ¼ÒÄÏÁÖ¼ÒÀÇ Æ÷¸ËÀ̳ª ÁÖ¼Ò ÆÐ¹Ð¸®¸¦ Áö½ÃÇÑ´Ù. ´ç½ÅÀº ÀÌ ¸â¹ö³»¿¡ AF_INET°ªÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. 11.3Àý [¼ÒÄÏÁÖ¼Ò] 150ÂÊÀ» º¸¶ó

struct in_addr sin_addr

À̰ÍÀº È£½ºÆ® ÀåÄ¡ÀÇ ÀÎÅÍ³Ý ÁÖ¼ÒÀÌ´Ù. ¾î¶»°Ô ¿©±â¿¡ ³ÖÀ» °ªÀ» ¾ò´ÂÁö¿¡ °üÇÏ¿©´Â 11.5.2Àý [È£½ºÆ® ÁÖ¼Ò] 155Âʰú 11.5.2.4 [È£½ºÆ® À̸§] 158ÂÊÀ» º¸¶ó.

unsigned short int sin_port

À̰ÍÀº Æ÷Æ®¹øÈ£ÀÌ´Ù. 11.5.3Àý [Æ÷Æ®] 159ÂÊÀ» º¸¶ó.

´ç½ÅÀÌ bind³ª setsocknameÀ» È£ÃâÇÒ ¶§, ¸¸¾à ´ç½ÅÀÌ ÀÎÅÍ³Ý À̸§°ø°£ ¼ÒÄÏ ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù¸é, ' ±æÀÌ' ¸Å°³º¯¼ö·Î sizeof (struct sockaddr_in)À» ¸í½ÃÇØ¾ß ÇÑ´Ù.

11.5.2 È£½ºÆ® ÁÖ¼Ò

ÀÎÅͳÝÀÇ °¢ ÄÄÇ»ÅÍ´Â Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ °¡Áø´Ù. ÁÖ¼Ò´Â ÀÎÅͳÝÀÇ ¸ðµç °Íµé »ç ÀÌ¿¡¼­ ±× ÄÄÇ»Å͸¦ Áö½ÃÇÏ´Â ¼ýÀÚÀÌ´Ù. »ç¿ëÀÚ´Â Åë»ó ¼ýÀÚ·ÎµÈ È£½ºÆ® ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù. ±×°ÍÀº '128.52.46.32'ó·³ ³× ¼ýÀÚ·Î µÇ¾î ÀÖ°í Á¡À¸·Î ³ª´µ¾îÁ® ÀÖ´Ù. °¢ ÄÄÇ»ÅÍ´Â ¶ÇÇÑ Çϳª ¶Ç´Â ±× ÀÌ »óÀÇ È£½ºÆ® À̸§À» °¡Áø´Ù. ±×°ÍÀº 'churchy.gnu.ai.mit.edu'ó·³ Á¡À¸·Î ³ª´µ¾îÁø ´Ü¾îÀÇ ¹®ÀÚ¿­ÀÌ ´Ù.

»ç¿ëÀÚ°¡ È£½ºÆ®¸¦ ¸í½ÃÇϰÔÇÏ´Â ÇÁ·Î±×·¥Àº ÀüÇüÀûÀ¸·Î ¼ýÀÚÁÖ¼Ò¿Í È£½ºÆ® À̸§ ¸ðµÎ¸¦ ¼ö¿ëÇÑ ´Ù. ±×·¯³ª ÇÁ·Î±×·¥Àº ¿¬°áÀ» À§ÇØ ¼ýÀÚ·ÎµÈ ÁÖ¼Ò¸¦ ÇÊ¿ä·Î ÇÑ´Ù. Áï È£½ºÆ® ÁÖ¼Ò¸¦ »ç¿ëÇϱâ À§ ÇØ, ´ç½ÅÀº ±×°ÍÀÌ »ó¡Çϰí ÀÖ´Â ¼ýÀÚ ÁÖ¼Ò·Î º¯È¯ÇØ¾ß ÇÑ´Ù.

11.5.2.1 ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò

ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò´Â µ¥ÀÌÅÍÀÇ 4¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇÏ´Â ¼ýÀÚÀÌ´Ù. ±×°ÍµéÀº µÎºÎºÐÀ¸·Î ³ª´µ´Âµ¥, ³×Æ®¿öÅ© ¹øÈ£¿Í ±× ³×Å©¿öÅ©³»ÀÇ Áö¿ª ³×Æ®¿öÅ© ÁÖ¼Ò ¹øÈ£°¡ ±×°ÍÀÌ´Ù. ³×Æ®¿öÅ© ¼ýÀڴ óÀ½ Çϳª, µÑ¶Ç´Â ¼¼ °³ÀÇ ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇÑ´Ù. ³ª¸ÓÁö ¹ÙÀÌÆ®´Â Áö¿ª ÁÖ¼ÒÀÌ´Ù.

³×Æ®¿öÅ© ¹øÈ£µéÀº ³×Æ®¿öÅ© Á¤º¸ ¼¾ÅÍ (NIC, Network Information Center)¿¡ µî·ÏµÇ¾î ÀÖ´Ù. ±×°ÍµéÀº ¼¼ °³ÀÇ Å¬·¡½º A,B,C·Î ºÐÇҵȴÙ. °¢°¢ ÄÄÇ»Å͸¶´ÙÀÇ Áö¿ª³×Æ®¿öÅ© ÁÖ¼Ò´Â °¢ ³×Æ®¿öÅ© ÀÇ °ü¸®ÀÚ¿¡ ÀÇÇØ µî·ÏµÇ¾î ÀÖ´Ù.

Ŭ·¡½º A ³×Æ®¿öÅ©´Â 0¿¡¼­ 127¹üÀ§ÀÇ ÇÑ ¹ÙÀÌÆ® ¼ýÀÚ¸¦ °¡Áø´Ù. Ŭ·¡½º A ³×Æ®¿öÅ©ÀÇ ¼ö´Â ¸Å ¿ì ÀÛÁö¸¸, °¢°¢Àº ±²ÀåÈ÷ ¸¹Àº ¼öÀÇ È£½ºÆ®¸¦ Áö¿øÇÑ´Ù. Áß°£Å©±âÀÇ Å¬·¡½º B ³×Æ®¿öÅ©´Â µÎ¹ÙÀÌ Æ®ÀÇ ³×Æ®¿öÅ© ¹øÈ£¸¦ °¡Áø´Ù. ù ¹øÂ° ¹ÙÀÌÆ®ÀÇ ¹üÀ§´Â 128¿¡¼­ 191±îÁöÀÌ´Ù. Ŭ·¡½º C ³×Æ®¿öÅ© ´Â °¡Àå ÀÛ´Ù. ±×°ÍµéÀº ¼¼ ¹ÙÀÌÆ®ÀÇ ³×Æ®¿öÅ© ¹øÈ£¸¦ °¡Áö¸ç, ù ¹øÂ° ¹ÙÀÌÆ®ÀÇ ¹üÀ§´Â 192¿¡¼­ 255 ±îÁöÀÌ´Ù. ±×·¯¹Ç·Î, ÀÎÅÍ³Ý ÁÖ¼ÒÀÇ Ã³À½ 1, 2, 3¹ÙÀÌÆ®´Â ³×Æ®¿öÅ©¸¦ ¸í½ÃÇÏ´Â °ÍÀÌ´Ù. ÀÎÅÍ³Ý ÁÖ¼Ò ÀÇ ³ª¸ÓÁö ¹ÙÀÌÆ®´Â ³×´ÀÅýÅ© ¾È¿¡¼­ÀÇ ÁÖ¼Ò¸¦ ¸í½ÃÇÑ´Ù. Ŭ·¡½º A³×Æ®¿öÅ© 0Àº ¸ðµç ³×Æ®¿öÅ©¿¡ ºê·Îµåij½ºÆ®¿ëÀ¸·Î ¿¹¾àµÇ¾î ÀÖ´Ù. Ãß°¡ÀûÀ¸·Î °¢ ³×Æ®¿öÅ© ³»¿¡¼­ÀÇ È£½ºÆ® ¹øÈ£°¡ 0ÀÎ °ÍÀº ±× ³×Æ®¿öÅ© ³»ÀÇ ¸ðµç È£½ºÆ®µé¿¡°Ô ¹æ¼Û(broadcast)Çϱâ À§ÇØ ¿¹¾àµÇ¾î ÀÖ´Ù. Ŭ·¡½º A ³×Æ®¿öÅ© 127 Àº ·çÇÁ¹é(loopback)¿ëÀ¸·Î ¿¹¾àµÇ¾î ÀÖ´Ù. ´ç½ÅÀº ±×·¯¹Ç·Î ÀÎÅÍ³Ý ÁÖ¼Ò '127.0.0.1'À» »ç¿ëÇϸé ÀڽŠÀÇ È£½ºÆ®ÀåÄ¡¸¦ ÂüÁ¶ ÇÒ ¼ö ÀÖ´Ù.

´ÜÀÏ ÀåÄ¡´Â ¿©·¯°³ÀÇ ³×Æ®¿öÅ©ÀÇ ¸â¹ö°¡ µÉ ¼ö ÀÖÀ¸¹Ç·Î, ±×°ÍÀº ¿©·¯°³ÀÇ È£½ºÆ® ÁÖ¼Ò¸¦ °¡Áú ¼ö ÀÖ´Ù. ±×·¯³ª, °°Àº È£½ºÆ® ÁÖ¼Ò¸¦ °¡Áø ÀåÄ¡°¡ Çϳª ÀÌ»ó À־´Â ¾È µÈ´Ù.

ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ À§ÇÑ ¼ýÀÚ¿Í À̸§ Ç¥ÇöÀº ³×°¡Áö ÇüŰ¡ ÀÖ´Ù:

a.b.c.d

À̰ÍÀº °¢°³º°ÀûÀ¸·Î ÁÖ¼ÒÀÇ ¸ðµç ³× °³ÀÇ ¹ÙÀÌÆ®¸¦ ³ªÅ¸³½´Ù.

a.b.c

ÁÖ¼ÒÀÇ ¸¶Áö¸· ºÎºÐÀÎ c´Â 2¹ÙÀÌÆ®·Î Ãë±ÞµÈ´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¹øÈ£ a.b¸¦ °¡Áø Ŭ·¡½º BÀÇ È£ ½ºÆ® ÁÖ¼Ò¸¦ ³ªÅ¸³»´Âµ¥ À¯¿ëÇÏ´Ù.

a.b

ÁÖ¼ÒÀÇ ¸¶Áö¸· ºÎºÐÀÎ b´Â 3¹ÙÀÌÆ®·Î Ãë±ÞµÈ´Ù. À̰ÍÀº ³×Æ®¿öÅ© ÁÖ¼Ò a¸¦ °¡Áø Ŭ·¡½ºAÀÇ È£½ºÆ® ÁÖ¼Ò¸¦ Ç¥½ÃÇϴµ¥ À¯¿ëÇÏ´Ù.

a

¸¸¾à ÇϳªÀÇ ºÎºÐ¸¸ ÁÖ¾îÁø´Ù¸é, À̰ÍÀº È£½ºÆ® ÁÖ¼Ò¿¡ Á÷Á¢ ÀÏÄ¡ÇÏ°Ô µÈ´Ù.

ÁÖ¼ÒÀÇ °¢ºÎºÐ¿¡¼­, ±â¼ö¸¦ Ç¥½ÃÇϱâ À§ÇØ º¸Åë C°ü·Ê¸¦ »ç¿ëÇÑ´Ù. ´Ù¸¥¸»·Î Çϸé, '0x' ¶Ç´Â '0X' ·Î ½ÃÀÛÇÏ´Â °ÍÀº 16Áø¼ö ±â¼ö¸¦ ³»Æ÷ÇÑ´Ù. '0'À¸·Î ½ÃÀÛÇÏ´Â °ÍÀº 8Áø¼ö¸¦ ³»Æ÷Çϰí, ´Ù¸¥ °ÍÀº 10 Áø¼ö ±â¼ö·Î °¡Á¤ÇÑ´Ù.

11.5.2.2 È£½ºÆ® ÁÖ¼Ò ÀÚ·áÇü

ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò´Â Á¤¼öÇüµé(unsigned long intÇü)°°Àº Çü½ÄÀ¸·Î Ç¥ÇöµÈ´Ù. ´Ù¸¥ ¸»·ÎÇϸé, Á¤ ¼öµéÀº struct in_addrÀÇ ÇüÅÂÀÇ ±¸Á¶Ã¼¾È¿¡ µé¾î°¡°Ô µÈ´Ù. ¸¸¾à ¿ë¹ýÀÌ ÀÏÄ¡µÇ¸é ÁÁÀ» °ÍÀ̳ª, ±×·¸ Áö ¸øÇÏ´Ù¸é, ±¸Á¶Ã¼·Î ºÎÅÍ Á¤¼ö¸¦ »Ì¾Æ³»°Å³ª, Á¤¼ö¸¦ ±¸Á¶Ã¼¿¡ ³Ö´Â °ÍÀÌ ½±Áö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½ ÀÎÅÍ³Ý ÁÖ¼Ò¿¡ °üÇÑ ±âº»ÀûÀÎ Á¤ÀÇ´Â 'netinet/in.h'Çì´õ ÆÄÀÏ ¾È¿¡¼­ º¼¼ö ÀÖ´Ù:

struct in_addr ÀÚ·áÇü

ÀÌ ÀÚ·áÇüÀº ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ Æ÷ÇÔÇÏ´Â Á¤È®ÇÑ ¹®¸Æ¿¡ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÜÁö s_addrÀ̶ó´Â ÇϳªÀÇ Çʵ带 °¡Áø´Ù. ±×°ÍÀº unsigned long int ó·³ È£½ºÆ® ÁÖ¼Ò¹øÈ£¸¦ ÀúÀåÇÑ´Ù.

unsigned long int INADDR__LOOPBACK Macro

´ç½ÅÀº ÀÌ ÀåÄ¡ÀÇ ½ÇÁ¦ÁÖ¼Ò¸¦ ã´Â ´ë½Å¿¡, ÀÌ »ó¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×°ÍÀº º¸Åë 'localhost(·Î ÄÃÈ£½ºÆ®)'¶ó ºÒ¸®¿ì´Â ÀÎÅÍ³Ý ÁÖ¼Ò '127.0.0.1'ÀÌ´Ù. ÀÌ Æ¯º°ÇÑ »ó¼ö´Â ´ç½ÅÀÇ ÀåÄ¡ÀÇ ÁÖ¼Ò¸¦ »ì ÇǴµ¥ »ý±â´Â ¹®Á¦¸¦ ÇØ°áÇØ ÁØ´Ù. ¶ÇÇÑ, ½Ã½ºÅÛÀº ÇÑ ÀåÄ¡¿¡¼­ ÀÚ±âÀÚ½ÅÀ¸·Î Àü¼ÛÇÏ´Â °æ¿ì ¾î ¶² ³×Æ®¿öÅ©Àü¼ÛÀ» ÇÇÇϱâ À§ÇØ, ÁÖ·Î INADDR_LOOPBACKÀ» Ưº°È÷ ±¸ÇöÇϰí ÀÖ´Ù.

unsigned long int INADDR__ANY Macro

ÁÖ¼Ò¸¦ ¹ÙÀεùÇÒ ¶§, "¾î¶°ÇÑ ¿À´Â ÁÖ¼Ò(any incoming address)"¿¡ ´ëÇÑ °ÍÀ» ÀÌ »ó¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. 11.3.2Àý [ÁÖ¼Ò ¼³Á¤], 152ÆäÀÌÁö¸¦ º¸¶ó. À̰ÍÀº ´ç½ÅÀÌ ÀÎÅÍ³Ý ¿¬°áÀ» ¹Þ¾ÆµéÀÌ±æ ¿øÇÒ ¶§, sockaddr_in±¸Á¶Ã¼ÀÇ sin_addr¸â¹ö¿¡ ÁÖ·Î µé¾î°¡´Â ÁÖ¼ÒÀÌ´Ù.

unsigned long int INADDR__BROADCAST Macro

ÀÌ »ó¼ö´Â ¹æ¼Û¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ »ç¿ëµÇ´Â ÁÖ¼ÒÀÌ´Ù.

unsigned long int INADDR__NONE Macro

ÀÌ »ó¼ö´Â ¾î¶² ÇÔ¼öµéÀÌ ¿¡·¯¸¦ Áö½ÃÇϱâ À§ÇØ ¹ÝȯµÈ´Ù.

11.5.2.3 È£½ºÆ® ÁÖ¼Ò ÇÔ¼öµé

ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ Á¶ÀÛÇÏ´Â Ãß°¡ÀûÀÎ ÇÔ¼öµéÀº 'arpa/inet.h'¾È¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ±×°ÍµéÀº ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­·Î ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ Ç¥ÇöÇÑ´Ù. Áï ±×°ÍµéÀº ³×Æ®¿öÅ© ¹øÈ£¿Í ³×Æ®¿öÅ© ¾È¿¡¼­ÀÇ Áö¿ª ÁÖ ¼Ò¸¦ È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼­·Î Ç¥ÇöÇÑ´Ù. ³×Æ®ÄõÀ¸¿Í È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼­¿¡ °üÇÑ ¼³¸íÀº 11.5.3Àý [¹Ù ÀÌÆ® ¼ø¼­] 161ÂÊÀ» º¸¶ó.

int inet__aton (const char *name, struct in_addr *addr) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò À̸§À» Ç¥ÁØ ¼ýÀÚ¿Í Á¡ Ç¥½ÃÇü½Ä¿¡¼­ ÀÌÁøµ¥ÀÌÅÍ ÇüÀ¸·Î º¯È¯ÇÑ´Ù. ±×¸®°í, ±×°ÍÀ» addrÀÌ Áö½ÃÇϰí ÀÖ´Â struct in_addr¾È¿¡ ÀúÀåÇÑ´Ù.

unsigned long int inet__addr (const char *name) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ÀÎÅͳÝÁÖ¼Ò À̸§À» ¼ýÀÚ¿Í Á¡À¸·Î µÈ °Í¿¡¼­ ÀÌÁø µ¥ÀÌÅÍ·Î º¯È¯ÇÑ´Ù. ¸¸¾à ÀÔ·ÂÀÌ À¯ È¿ÇÏÁö¾ÊÀ¸¸é, inet_addrÀº INADDR_NONE¸¦ ¹ÝȯÇÑ´Ù. À̰ÍÀº À§¿¡¼­ ¼­¼úÇÑ inet_atonÀÇ ±¸½ÄÀÇ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. INADDR_NONEÀº À¯È¿ÇÑ ÁÖ¼Ò( 255.255.255.255)À̱⶧¹®¿¡ ±×°ÍÀº ¾µ¸ð ¾øÀÌ µÇ¾ú ´Ù. ±×¸®°í inet_aton Àº ¿¡·¯ ¹ÝȯÀ» Áö½ÃÇÏ´Â ´õ ±ò²ûÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.

unsigned long int inet__network (const char *name) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼ýÀÚ¿Í Á¡À¸·Î Ç¥ÇöµÇ´Â ÁÖ¼ÒÀ̸§À¸·Î ºÎÅÍ ³×Æ®¿öÅ© ¹øÈ£¸¦ »Ì¾Æ³½´Ù. ¸¸¾à ÀÔ·ÂÀ» Á¦´ë ·Î ÇÏÁö ¾ÊÀ¸¸é, inet_network´Â -1À» ¹ÝȯÇÑ´Ù.

char * inet__ntoa (struct in_addr addr) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò addrÀ» ¼ýÀÚ¿Í Á¡À¸·Î Ç¥ÇöµÇ´Â ¹®ÀÚ¿­·Î º¯È¯ÇÑ´Ù. ¹ÝȯµÇ´Â °ªÀº Á¤ÀûÀ¸·Î ÇÒ´çµÈ ¹öÆÛÀÇ Æ÷ÀÎÅÍÀÌ´Ù. °è¼Ó È£ÃâÇÏ¸é °°Àº ¹öÆÛ¿¡ µ¤¾î ¾²±â¸¦ ÇϹǷÎ, ¸¸¾à ±×°ÍÀ» ÀúÀåÇϱâ À§Çؼ­ ±× ¹®ÀÚ¿­À» º¹»çÇØµÎ¾î¾ß ÇÑ´Ù.

struct in_addr inet__makeaddr (int net, int local) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â Áö¿ª ³×Æ®¿öÅ© ³»ÀÇ Áö¿ª ÁÖ¼Ò local°ú ³×Æ®¿öÅ© ¹øÈ£ net¸¦ ¹­¾î ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò¸¦ ¸¸µç´Ù.

int inet__lnaof (struct in_addr addr) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò addrÀÇ ÀϺÎÀÎ ³×Æ®¿öÅ© ³»¿¡¼­ÀÇ Áö¿ª ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù.

int inet__netof (struct in_addr addr) Function

ÀÌ ÇÔ¼ö´Â ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼ÒÀÇ ÀϺÎÀÎ ³×Æ®¿öÅ© ¹øÈ£¸¦ ¹ÝȯÇÑ´Ù.

11.5.2.4 È£½ºÆ® À̸§µé

ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ À§ÇÑ ¼ýÀÚ¿Í Á¡À¸·Î Ç¥ÇöÇÏ´Â °Í ¿Ü¿¡, ´ç½ÅÀº ÀǹÌÀÖ´Â À̸§À» »ç¿ëÇÏ¿© È£½ºÆ®¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÀǹÌÀÖ´Â À̸§À» »ç¿ëÇÏ´Â °ÍÀÇ ÀåÁ¡Àº ¿ª½Ã ¿Ü¿ì±â ½±´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ÀÎÅÍ³Ý ÁÖ¼Ò '128.52.46.32'¸¦ °¡Áø ÀåÄ¡´Â 'churchy.gnu.ai.mit.edu'·Îµµ Ç¥ÇöµÈ´Ù. ¶ÇÇÑ 'gnu.ai.mit.edu' µµ¸ÞÀγ»ÀÇ ´Ù¸¥ ÄÄÇ»Å͵éÀº °£´ÜÇÏ°Ô 'churchy'·Î ÀÌ ÀåÄ¡¸¦ ÂüÁ¶ÇÒ¼ö ÀÖ´Ù.

³»ºÎÀûÀ¸·Î, ½Ã½ºÅÛÀº È£½ºÆ® À̸§°ú È£½ºÆ® ¹øÈ£ »çÀÌÀÇ ¸ÅÇÎÀÇ Á¤º¸¸¦ À¯ÁöÇÏ´Â µ¥ÀÌÅͺ£À̽º ¸¦ »ç¿ëÇÑ´Ù. ÀÌ µ¥ÀÌÅͺ£À̽º´Â º¸Åë '/etc/hosts'À̰ųª ³×ÀÓ¼­¹ö¿¡ ÀÇÇØ Á¦°øµÈ´Ù. ÀÌ µ¥ÀÌÅÍ º£ À̽º¿¡ Á¢±ÙÇϱâ À§ÇÑ ÇÔ¼ö¿Í±âÈ£µéÀº 'netdb.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ 'netdb.h'¸¦ Æ÷ÇÔÇÑ ´Ù¸é, ±×°ÍµéÀº ¹«Á¶°ÇÀûÀ¸·Î Á¤ÀǵǾî ÀÖ´Â BSDµéÀÇ Æ¯Â¡ÀÌ´Ù.

struct hostent ÀÚ·áÇü

ÀÌ ÀÚ·áÇüÀº È£½ºÆ® µ¥ÀÌÅͺ£À̽º¾ÈÀÇ ³»¿ëÀ» Ç¥ÇöÇÏ´Â µ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÙÀ½ ¸â¹ö¸¦ °¡Áø´Ù.:

char *h_name

À̰ÍÀº È£½ºÆ®ÀÇ "»ç¹«ÀûÀÎ" À̸§ÀÌ´Ù.

char **h_aliases

½ºÆ®¸µÀÇ null·Î ³¡³ª´Â º¤ÅͷΠǥÇöµÈ È£½ºÆ®ÀÇ ¶Ç´Ù¸¥ À̸§ÀÌ´Ù.

int h_addrtype

Àͼ­Àº È£½ºÆ® ÁÖ¼ÒÀÇ ÇüÅÂÀÌ´Ù. ½ÇÁ¦ÀûÀ¸·Î, À̰ÍÀÇ °ªÀº Ç×»ó AF_INETÀÌ´Ù. ¿ø·¡ ´Ù¸¥ Á¾·áÀÇ ÁÖ¼Òµµ ÀÎÅÍ³Ý ÁÖ¼Òó·³ µ¥ÀÌÅͺ£À̽º ¾È¿¡ Ç¥ÇöµÉ ¼ö ÀÖ´Ù. ¸¸¾à ±×·¸°Ô ÇÑ´Ù¸é, ´ç½ÅÀº ÀÌ Çʵ忡 AF_INETÀÌ ¾Æ´Ñ ¾î¶² °ªÀ» ã¾Æ¾ß ÇÑ´Ù. 11.3[¼ÒÄÏ ÁÖ¼Òµé] 150ÂÊÀ» º¸¶ó.

int h_length

À̰ÍÀº °¢ ÁÖ¼ÒÀÇ ¹ÙÀÌÆ® ±æÀÌ´Ù.

char **h_addr_list

À̰ÍÀº È£½ºÆ®ÀÇ ÁÖ¼ÒµéÀÇ º¤ÅÍÀÌ´Ù. (È£½ºÆ®µéÀº ´ÙÁß ³×Æ®¿öÅ©¿¡ ¿¬°áµÇ°í °¢°¢ ¿©·¯°³ÀÇ ´Ù¸¥ ÁÖ¼Ò¸¦ °¡Áø´Ù´Â °ÍÀ» ȸ»óÇ϶ó) º¤ÅÍ´Â ³ÎÆ÷ÀÎÅÍ·Î Á¾·áµÈ´Ù.

char *h_addr

À̰ÍÀº h_addr_list[0]°ú µ¿ÀǾîÀÌ´Ù. ´Ù¸¥ ¸»·Î, À̰ÍÀº ù ¹øÂ° È£½ºÆ® ÁÖ¼ÒÀÌ´Ù.

È£½ºÆ® µ¥ÀÌÅͺ£À̽º°¡ °í·ÁµÇ´Â °Í°ú´Â ´Þ¸®, °¢ ÁÖ¼Ò´Â h_length ¹ÙÀÌÆ® ±æÀÌÀÇ ¸Þ¸ð¸® ºí·ÏÀÌ ´Ù. ±×·¯³ª ´Ù¸¥ ¹®¸Æ¿¡¼­, ±×°ÍµéÀº, ´ç½ÅÀÌ À̰ÍÀ» in_addr ¶Ç´Â unsigned long int·Î º¯È¯ÇÒ ¼ö ÀÖ´Â ¾Ï½ÃÀûÀÎ °¡Á¤ÀÌ´Ù. struct hostent ±¸Á¶Ã¼ÀÇ È£½ºÆ® ÁÖ¼ÒµéÀº Ç×»ó ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­·Î ÁÖ¾îÁø´Ù. 11.5.5Àý [¹ÙÀÌÆ® ¼ø¼­] 161ÂÊÀ» º¸¶ó.

´ç½ÅÀº ƯÁ¤ÇÑ È£½ºÆ®¿¡ °üÇÑ Á¤º¸¸¦ ã±â À§ÇØ È£½ºÆ® µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇÏ·Á¸é gethostbyname ¶Ç´Â gethostbyaddr¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±× Á¤º¸´Â Á¤ÀûÀ¸·Î ÇÒ´çµÈ ±¸Á¶Ã¼¿¡ ¹ÝȯµÈ´Ù. ¸¸¾à ´ç½Å ÀÌ ±×°ÍÀ» È£Ãâ·Î ºÎÅÍ ÀúÀåÇϱâ À§Çؼ­´Â Á¤º¸¸¦ º¹»çÇØ¾ß ÇÑ´Ù.

struct hostent * gethostbyname (const char *name) ÇÔ¼ö

gethostbynameÇÔ¼ö´Â nameÀ¸·Î À̸§Áö¾îÁø È£½ºÆ®¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à °Ë»ö¿¡ ½ÇÆÐÇÏ ¿´À¸¸é, ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

struct hostent * gethostbyaddr (const char *addr, int length, int format) ÇÔ¼ö

gethostbyaddrÇÔ¼ö´Â ÀÎÅÍ³Ý ÁÖ¼Ò addrÀÇ È£½ºÆ®¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ÀμöÀÇ length´Â addr ÁÖ ¼ÒÀÇ (¹ÙÀÌÆ® ´ÜÀ§ÀÇ)Å©±âÀÌ´Ù. format´Â ÁÖ¼ÒÇü½ÄÀ» ¸í½ÃÇÑ´Ù. Áï ÀÎÅÍ³Ý ÁÖ¼Ò¶ó¸é AF_INET°ªÀ¸ ·Î ¸í½ÃÇÏ¸é µÈ´Ù. ¸¸¾à °Ë»ö¿¡ ½ÇÆÐ¸¦ Çϸé, gethostbyaddr´Â ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

¸¸¾à gethostbyname ¶Ç´Â gethostbyaddrÀ» ÀÌ¿ëÇÑ À̸§°Ë»öÀÌ ½ÇÆÐÇϸé, ´ç½ÅÀº º¯¼öh_errnoÀÇ °ªÀ» »ìÆìº¸°í ±× ¿øÀÎÀ» ãÀ»¼ö ÀÖ´Ù. (±×°ÍÀº ±×·¯ÇÑ ÇÔ¼ö°¡ errno¸¦ ¼¼ÆÃÇϵµ·Ï ´õ ±ò²ûÇÏ°Ô ¼³°èµÇ¾î ÀÖ´Ù. ±×·¯³ª h_errnoÀÇ »ç¿ëÀº ´Ù¸¥ ½Ã½ºÅÛ¿¡ ´ëÇØ ȣȯ¼º ÀÖ°Ô µÇ¾î ÀÖ´Ù.) h_erro»ç¿ë Çϱâ Àü¿¡, ´ç½ÅÀº ´ÙÀ½°ú °°ÀÌ ±×°ÍÀ» ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù.

extern int h_errno;

¾Æ·¡´Â h_errno¾È¿¡¼­ ãÀ»¼ö ÀÖ´Â errorÄÚµåµéÀÌ´Ù:

HOST_NOT_FOUND

¾î¶² È£½ºÆ®°¡ data base¾È¿¡ ¾ø´Ù.

TRY_AGAIN

ÀÌ »óÅ´ ³×ÀÓ¼­¹ö¿¡ ¿¬°áµÇÁö ¾ÊÀ» ¶§ ¹ß»ýÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇÑ´Ù¸é, ¼º°øÇÒ ¼ö µµ ÀÖ´Ù.

NO_RECOVERY

º¹±¸ÇÒ¼ö ¾ø´Â ¿¡·¯ ¹ß»ý.

NO_ADDRESS

È£½ºÆ® µ¥ÀÌÅͺ£À̽º´Â À̸§¿¡ ´ëÇÑ Ç׸ñÀ» Æ÷ÇÔÇϳª, ±×°ÍÀº ÀûÇÕÇÑ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ °¡ÁöÁö ¾Ê¾Ò´Ù.

´ç½ÅÀº ¶ÇÇÑ sethostent,gethostent,endhostnet¸¦ »ç¿ëÇÏ¿© ÇÑ ¹ø¿¡ ÇÑ Ç׸ñ¾¿ Àüü È£½ºÆ® µ¥ÀÌ Åͺ£À̽º¸¦ ÁÖ¿í »ìÆìº»´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµéÀ» »ç¿ëÇÒ ¶§´Â ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍµéÀº ÀçÁøÀÔ ¼ºÀ» °¡ÁöÁö ¾Ê±â ¶§¹®ÀÌ´Ù.(Áï, ½ºÄÉÁìÀ» Á¡À¯ÇÑ´Ù)

void sethostent (int stayopen) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â µ¥ÀÌÅͺ£À̽º¸¦ »ìÆìº¸´Â °ÍÀ» ½ÃÀÛÇϱâ À§Çؼ­ È£½ºÆ® µ¥ÀÌÅͺ£À̽º¸¦ ¿¬´Ù. ´ç½ÅÀº Ç׸ñµéÀ» Àбâ À§ÇØ ±×·¯°í ³ª¼­ gethostent¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¸¸¾à stayopenÀμö°¡ 0ÀÌ ¾Æ´Ï¸é, ´Ù À½À¸·Î gethostbyname ¶Ç´Â gethostbyaddr¸¦ È£ÃâÇÏ´Â °ÍÀÌ µ¥ÀÌÅͺ£À̽º¸¦ ´ÝÁö ¾Êµµ·Ï (±×°Íµé ÀÌ ±×·¡¾ß ÇÏ´Â °Íó·³) À̰ÍÀº Ç÷¡±×¸¦ ¼¼Æ®ÇÑ´Ù.

struct hostent * gethostent () ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â È£½ºÆ® µ¥ÀÌÅͺ£À̽º ¾ÈÀÇ ´ÙÀ½ Ç׸ñÀ» ¹ÝȯÇÑ´Ù. ¸¸¾à ´õ ÀÌ»ó Ç׸ñÀÌ ¾øÀ¸¸é, ³Î Æ÷ÀÎÅÍ ¸¦ ¸®ÅÏÇÑ´Ù.

void endhostent () ÇÔ¼ö

ÇÔ¼ö´Â È£½ºÆ® µ¥ÀÌÅÍ º£À̽º¸¦ ´Ý´Â´Ù.

11.5.3 ÀÎÅÍ³Ý Æ÷Æ®

ÀÎÅÍ³Ý À̸§°ø°£¿¡¼­ÀÇ ¼ÒÄÏÁÖ¼Ò´Â, ÀåÄ¡ÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¿¡ Ãß°¡ÀûÀ¸·Î ÁÖ¾îÁø ÀåÄ¡ÀÇ ¼ÒÄÏÀ» ±¸º° ÇÏ´Â Æ÷Æ®¹øÈ£·Î ±¸¼ºµÈ´Ù. Æ÷Æ®¹øÈ£´Â 0¿¡¼­ 65535¹ø±îÁöÀÇ ¹üÀ§ÀÌ´Ù. IPPORT_RESERVEDº¸´Ù ÀÛÀº Æ÷Æ®¹øÈ£´Â Ç¥Áؼ­¹ö¿¡¼­ finger³ª telnet°ú °°Àº °ÍÀ» À§ÇØ ¿¹¾àµÇ¾î ÀÖ´Ù. ½Ã½ºÅÛ ³»ºÎ¿¡ ÀÌ·¯ÇÑ °ÍµéÀ» À¯ÁöÇϰí ÀÖ´Â µ¥ÀÌÅͺ£À̽º°¡ ÀÖ°í, ´ç½ÅÀº getservbynameÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º À̸§°ú Æ÷Æ®¹øÈ£ÀÇ ¸ÊÀ» ¸¸µé ¼ö ÀÖ´Ù.; 11.5.4Àý [¼­ºñ½º µ¥ÀÌÅͺ£À̽º], 160ÂÊÀ» º¸¶ó.

¸¸¾à µ¥ÀÌÅͺ£À̽º¾È¿¡ Á¤ÀÇµÈ Ç¥ÁØ ÁßÀÇ Çϳª°¡ ¾Æ´Ñ ¼­¹ö¸¦ ÀÛ¼ºÇÏ·Á¸é, ±×°ÍÀ» À§ÇÑ Æ÷Æ®¹øÈ£ ¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù. IPPORT_USERRESERVED º¸´Ù ´õ Å« ¼ýÀÚ¸¦ »ç¿ëÇ϶ó. ¾î¶² ¹øÈ£µéÀº ¼­¹ö µéÀ» À§ÇØ ¿¹¾àµÇ¾î ÀÖ°í ½Ã½ºÅÛ¿¡ ÀÇÇØ ÀÚµ¿À¸·Î »ý¼ºµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ´Ù¸¥ »ç¿ëÀڵ鿡 ÀÇÇÑ ¼­ ¹ö»ç¿ë°úÀÇ Ãæµ¹À» ÇÇÇÏ´Â °ÍÀº ´ç½Å¿¡°Ô ´Þ·È´Ù.

´ç½ÅÀÌ ±×°ÍÀÇ ÁÖ¼Ò¸¦ ¸í½ÃÇÏÁö ¾Ê°í ¼ÒÄÏÀ» »ç¿ëÇÒ ¶§, ½Ã½ºÅÛÀº Æ÷Æ®¹øÈ£¸¦ Çϳª »ý¼ºÇÑ´Ù. ÀÌ ¹øÈ£´Â IPPORT_RESERVED¿Í IPPORT_ USERRESERVED»çÀÌÀÇ °ªÀÌ´Ù.

ÀÎÅͳݿ¡¼­, °°Àº ¼ÒÄÏÁÖ¼Ò(È£½ºÆ® ÁÖ¼Ò + Æ÷Æ®ÁÖ¼Ò)·Î Åë½ÅÀ» ½ÃµµÇÏÁö ¾Ê´Â´Ù¸é, °°Àº Æ÷Æ®¹øÈ£ ·Î µÎ °³ÀÇ ´Ù¸¥ ¼ÒÄÏÀ» °¡Áö´Â °ÍÀº ½ÇÁ¦·Î Àû´çÇÑ ¹æ¹ýÀÌ´Ù. »óÀ§ÇÁ·ÎÅäÄÝÀÌ ±×°ÍÀ» ¿ä±¸ÇÒ¶§, Ư º°ÇÑ »óȲÀ» ±â´ëÇÏ°í °°Àº Æ÷Æ®¹øÈ£¸¦ º¹»çÇÏÁö ¸»¾Æ¶ó. º¸Åë, ½Ã½ºÅÛÀº ±×·¯ÇÑ ÀÏÀ» ¼öÇàÇÏÁö ¾Ê À» °ÍÀÌ´Ù. bind´Â º¸Åë ´Ù¸¥ Æ÷Æ®¹øÈ£¸¦ ¿ä±¸ÇÑ´Ù. Æ÷Æ®¹øÈ£¸¦ ´Ù½Ã »ç¿ëÇϱâ À§Çؼ­´Â, ¼ÒÄÏ¿É¼Ç SO_REUSEADDR¸¦ ¼¼Æ®Ç϶ó. 11.11.2Àý [¼ÒÄÏ-¼öÁØ ¿É¼Ç] 181ÂÊÀ» º¸¶ó.

´ÙÀ½ ¸ÅÅ©·ÎµéÀº 'netinet/in.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.

int IPPORT__RESERVED ¸ÅÅ©·Î

IPPORT_RESERVED º¸´Ù ÀÛÀº °ªÀÇ Æ÷Æ®´Â ¼öÆÛÀ¯Àú¿ëÀ¸·Î ¿¹¾àµÇ¾î ÀÖ´Ù.

int IPPORT__USERRESERVED ¸ÅÅ©·Î

¸í¹éÈ÷ »ç¿ëÇϱâ À§ÇØ ¿¹¾àµÈ, IPPORT_USERRESERVEDº¸´Ù Å©°Å³ª °°Àº Æ÷Æ®ÀÌ´Ù. ±×°ÍµéÀº º¸ Åë ÀÚµ¿À¸·Î ÇÒ´çµÈ´Ù.

11.5.4 ¼­ºñ½º µ¥ÀÌÅͺ£À̽º

À¯¸íÇÑ ¼­ºñ½ºÀÇ °æ·Î¸¦ À¯ÁöÇÏ´Â µ¥ÀÌÅͺ£À̽º´Â º¸Åë '/etc/services'ÆÄÀÏÀ̰ųª ³×ÀÓ¼­¹öÀÇ µ¿µî ÇÑ ÆÄÀÏÀÌ´Ù. ÀÌ ¼­ºñ½º µ¥ÀÌÅͺ£À̽º¸¦ ¾ï¼¼½ºÇϱâ À§ÇØ 'netdb.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Â ´ÙÀ½ À¯Æ¿¸®Æ¼ µéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

struct servent ÀÚ·áÇü

ÀÌ ÀÚ·áÇüÀº ¼­ºñ½º µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍÀÇ Ç׸ñ¿¡ °üÇÑ Á¤º¸¸¦ ³ªÅ¸³½´Ù.

char *s_name

À̰ÍÀº ¼­ºñ½ºÀÇ "°ø½ÄÀû"ÀÎ À̸§ÀÌ´Ù.

char **s_aliases

¹®ÀÚ¿­ÀÇ ¹è¿­·Î Ç¥ÇöµÈ ¼­ºñ½ºÀÇ ¶Ç´Ù¸¥ À̸§µéÀÌ´Ù. ÀÌ ¹è¿­Àº ¸¶Áö¸·¿¡ ³ÎÆ÷ÀÎÅͰ¡ µé¾î°£´Ù.

int s_port

À̰ÍÀº ¼­ºñ½ºÀÇ Æ÷Æ® ¹øÈ£ÀÌ´Ù. Æ÷Æ®¹øÈ£´Â ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­·Î µÇ¾î ÀÖ´Ù. ; 11.5.5Àý [¹ÙÀÌÆ® ¼ø¼­] 161ÆäÀÌÁö¸¦ º¸¶ó.

char *s_proto

À̰ÍÀº ÀÌ ¼­ºñ½º¿Í »ç¿ëµÇ´Â ÇÁ·ÎÅäÄÝÀÇ À̸§ÀÌ´Ù. 11.5.6Àý [ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º] 162ÂÊÀ» º¸ ¶ó.

ƯÁ¤ÇÑ ¼­ºñ½º¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ¸·Á¸é, getservbynameÀ̳ª getservby port ÇÔ¼ö¸¦ »ç¿ëÇ϶ó. ÀÌ Á¤º¸´Â Á¤ÀûÀ¸·Î ÇÒ´çµÈ ±¸Á¶Ã¼¾ÈÀ¸·Î ¹ÝȯµÈ´Ù. Áï ±×°ÍÀ» ¿©·¯¹ø È£ÃâÇÏ´Â °ÍÀ¸·Î ºÎÅÍ º¸È£ÇÏ·Á ¸é ±× Á¤º¸¸¦ º¹»çÇØ ³õ¾Æ¾ß¸¸ ÇÑ´Ù.

struct servent * getservbyname (const char *name, const char *proto) ÇÔ¼ö

getservbynameÇÔ¼ö´Â nameÀ̶ó°í proto¶ó´Â ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí À̸§Áö¾îÁø ¼­ºñ½º¿¡ °üÇÑ Á¤ º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ±×·¯ÇÑ ¼­ºñ½º¸¦ ãÁö ¸øÇϸé, ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

ÀÌ ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®µé»Ó¸¸ ¾Æ´Ï¶ó ¼­¹öµé¿¡¼­µµ À¯¿ëÇÏ´Ù. ¼­¹ö¿¡¼­´Â µè°íÀÚ ÇÒ ¶§ ¾î¶² Æ÷Æ®¸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇÒ ¶§, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. (µè´Â °Í¿¡ °üÇÏ¿©¼­´Â 11.8.2Àý[µè±â], 167ÂÊÀ» º¸ ¶ó)

struct servent * getservbyport (int port, const char *proto) ÇÔ¼ö

getservbyportÇÔ¼ö´Â protoÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí port¶ó´Â Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ¼­ºñ½º¿¡ °üÇÑ Á¤º¸¸¦ ¹Ý ȯÇÑ´Ù. ´ç½ÅÀº ¶ÇÇÑ setservent, getservent,endservent¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º µ¥ÀÌÅͺ£À̽º¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµéÀº ÀçÁøÀÔ¼ºÀ» °¡ÁöÁö ¾Ê±â ¶§¹®¿¡, »ç¿ëÇÒ ¶§ ÁÖÀÇÇØ¾ß ÇÑ´Ù.

void setservent (int stayopen) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ´ç½ÅÀÌ Á¶»çÇÏ·Á´Â ¼­ºñ½º µ¥ÀÌÅͺ£À̽º¸¦ ¿¬´Ù.

¸¸¾à stayopen Àμö°¡ 0ÀÌ ¾Æ´Ï¸é, getservbyname¶Ç´Â getservbyport¸¦ ´ÙÀ½¿¡ È£ÃâÀ» ÇÏ¿´À»¶§ µ¥ ÀÌÅͺ£À̽º¸¦ ´ÝÁö ¾Êµµ·Ï(º¸ÅëÀº ´Ý´Â´Ù), Ç÷¡±×¸¦ ¼¼Æ®ÇÑ´Ù. ¿©·¯¹øÀÇ È£ÃâÀÌ µ¥ÀÌÅͺ£À̽º¸¦ ¿© ·¯¹ø ¿­Áö ¾Êµµ·Ï ÇÒ ¶§, À̰ÍÀº ´õ¿í È¿À²ÀûÀÌ´Ù.

struct servent * getservent (void) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼­ºñ½º µ¥ÀÌÅͺ£À̽º¾ÈÀÇ ´ÙÀ½ Ç׸ñÀ» ¹ÝȯÇÑ´Ù. ¸¸¾à ´õ ÀÌ»óÀÇ Ç׸ñÀÌ ¾øÀ¸¸é, ³ÎÆ÷ÀÎ Å͸¦ ¹ÝȯÇÑ´Ù.

void endservent (void) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼­ºñ½º µ¥ÀÌÅͺ£À̽º¸¦ ´Ý´Â´Ù.

11.5.5 ¹ÙÀÌÆ®¼ø¼­ º¯È¯

ÄÄÇ»ÅÍÀÇ Á¾·ù°¡ Ʋ¸®¸é, ÇÑ ¿öµå ³»¿¡¼­ ¹ÙÀÌÆ®ÀÇ ¼ø¼­°¡ Ʋ¸®°Ô »ç¿ë µÉ ¼ö ÀÖ´Ù. ¾î¶² ÄÄÇ»Å͵é Àº ¿öµå¾È¿¡ »óÀ§ ¹ÙÀÌÆ®°¡ ¸ÕÀú ¿À±âµµ Çϰí (À̸¦ "Å« Á¾°áÀÚ(big-endian)"¶ó ºÎ¸¥´Ù), ´Ù¸¥ °Íµé Àº »óÀ§ ¹ÙÀÌÆ®°¡ ³ªÁß¿¡ ¿À±âµµ ÇÑ´Ù.(À̸¦ "ÀÛÀº Á¾°áÀÚ(little-endian)"¶ó ÇÑ´Ù)

´Ù¸¥ ¹ÙÀÌÆ®¼ø¼­¸¦ »ç¿ëÇÏ´Â ÀåÄ¡µéÀÌ Åë½ÅÇϱâ À§ÇØ, ÀÎÅÍ³Ý ÇÁ·ÎÅäÄݵéÀº ³×Æ®¿öÅ© »ó¿¡¼­ Àü¼ÛµÇ ´Â µ¥ÀÌÅ͸¦ À§ÇØ ±ÔÁ¤µÈ ¹ÙÀÌÆ®¼ø¼­¸¦ ¸í½ÃÇϰí ÀÖ´Ù.

ÀÎÅÍ³Ý ¼ÒÄÏ ¿¬°áÀ» ¼³Á¤ÇÒ ¶§, ´ç½ÅÀº sockaddr_in±¸Á¶Ã¼ÀÇ sin_port¿Í sin_addr¸â¹ö¸¦ ³×Æ®¿öÅ© ¹ÙÀÌÆ®¼ø¼­·Î Ç¥ÇöÇØ¾ß¸¸ ÇÑ´Ù. ¼ÒÄÏÀ» ÅëÇØ Àü¼ÛµÇ´Â Á¤¼ö µ¥ÀÌÅ͸¦ ÄÚµùÇÒ ¶§ ¿ª½Ã ±×°ÍÀ» ³×Æ®¿ö Å© ¹ÙÀÌÆ® ¼ø¼­·Î º¯È¯ÇØ¾ß ÇÑ´Ù. ¸¸¾à ±×·¸°Ô ÇÏÁö ¾Ê´Â´Ù¸é, ÇÁ·Î±×·¥Àº ´Ù¸¥ Á¾·ùÀÇ ÀåÄ¡¿Í Åë½Å À» Çϴµ¥ ½ÇÆÐÇÒ °ÍÀÌ´Ù.

Æ÷Æ®¹øÈ£³ª È£½ºÆ® ÁÖ¼Ò¸¦ ¾ò±â À§ÇØ getservbyname, gethostbyname, inet_addr¸¦ »ç¿ëÇÑ´Ù¸é, »ç ¿ëµÇ´Â °ªµéÀº ÀÌ¹Ì ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­·Î µÇ¾î ÀÖ´Â °ÍÀÌ´Ù. ´ç½ÅÀº ±×°ÍµéÀ» sockaddr_in¿¡ Á÷ Á¢ º¹»çÇÒ ¼ö ÀÖ´Ù.

±×·¸Áö ¾ÊÀº °æ¿ì, °ªµéÀ» Á¤È®È÷ º¯È¯ÇÏÁö ¾ÊÀ¸¸é ¾ÈµÈ´Ù. sin_port¸â¹ö·Î »ç¿ëÇϱâ À§ÇØ htons¿Í ntohs¸¦ »ç¿ëÇÏ¿© °ªµéÀ» º¯È¯Ç϶ó. sin_addr¸â¹ö·Î »ç¿ëÇϱâ À§ÇØ htonl°ú ntohl¸¦ »ç¿ëÇÏ¿© °ªµéÀ» º¯È¯Ç϶ó. (struct in_addrÀº unsigned long int°ú °°Àº °ÍÀÓÀ» ±â¾ïÇ϶ó) ÀÌ·¯ÇÑ ÇÔ¼öµéÀº 'netinet/in.h'¾È¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

unsigned short inthtons (unsigned short int hostshort) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â È£½ºÆ® ¹ÙÀÌÆ®¼ø¼­·Î µÈ shortÇü Á¤¼ö hostshort¸¦ ³×Æ®¿öÅ©¹ÙÀÌÆ® ¼ø¼­·Î º¯È¯ÇÑ´Ù.

unsigned short int ntohs (unsigned short int netshort) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ³×Æ®¿öÅ© ¹ÙÀÌÆ®¼ø¼­·Î µÈ shortÇü Á¤¼ö netshort¸¦ È£½ºÆ® ¹ÙÀÌÆ®¼ø¼­·Î º¯È¯ÇÑ´Ù.

unsigned long int htonl (unsigned long int hostlong ) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â È£½ºÆ® ¹ÙÀÌÆ®¼ø¼­·ÎµÈ longÇü Á¤¼ö hostlongÀ» ³×Æ®¿öÅ© ¹ÙÀÌÆ®¼ø¼­·Î º¯È¯ÇÑ´Ù.

unsigned long int ntohl (unsigned long int netlong ) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ³×Æ®¿öÅ© ¹ÙÀÌÆ®¼ø¼­·Î µÈ longÇü Á¤¼ö netlongÀ» È£½ºÆ® ¹ÙÀÌÆ®¼ø¼­·Î º¯È¯ÇÑ´Ù.

11.5.6 ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º

¼ÒÄÏ¿¡¼­ »ç¿ëµÇ´Â Åë½Å ÇÁ·ÎÅäÄÝÀº ¾î¶»°Ô µ¥ÀÌÅ͸¦ ±³È¯ÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ Àú¼öÁØ ¼¼ºÎ»çÇ×À» Á¦ ¾îÇÑ´Ù. ¿¹¸¦ µé¸é, ÇÁ·ÎÅäÄÝÀº, Àü¼Û»óÀÇ ¿¡·¯°ËÃâÀ» À§ÇÑ °Ë»çÇÕ°è(checksum)°°Àº °ÍÀ̳ª, ¸Þ½ÃÁö ÀÇ °æ·Î¼³Á¤ ¸í·É °°Àº °ÍµéÀ» ±¸ÇöÇÑ´Ù. ÀÏ¹Ý »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀº ÀÌ·¯ÇÑ ¼¼ºÎ»çÇ׵鿡 ´ëÇØ¼­ Á÷Á¢ÀûÀÎ ¿µÇâÀ» ¹ÞÁö´Â ¾Ê´Â´Ù.

ÀÎÅÍ³Ý À̸§°ø°£ÀÇ ±âº» Åë½Å ÇÁ·ÎÅäÄÝÀº Åë½Å½ºÅ¸ÀÏ¿¡ ÀÇÁ¸ÇÑ´Ù. ½ºÆ®¸² Åë½ÅÀÇ ±âº» ÇÁ·ÎÅäÄÝÀº TCP("Àü¼Û Á¦¾î ÇÁ·ÎÅäÄÝ")ÀÌ´Ù. µ¥ÀÌÅͱ׷¥ Åë½ÅÀÇ ±âº» ÇÁ·ÎÅäÄÝÀº UDP("À¯Àú µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅä ÄÝ")ÀÌ´Ù. ½Å·Ú¼º ÀÖ´Â µ¥ÀÌÅͱ׷¥ Åë½ÅÀÇ ±âº» ÇÁ·ÎÅäÄÝÀº RDP("½Å·Ú¼º ÀÖ´Â µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅäÄÝ ")ÀÌ´Ù. ´ç½ÅÀº ¾Æ¸¶ °ÅÀÇ ´ëºÎºÐ ±âº» ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ °ÍÀÌ´Ù.

ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝÀº ÀϹÝÀûÀ¸·Î ¼ýÀÚ ´ë½Å À̸§À¸·Î ¸í½ÃµÈ´Ù. È£½ºÆ®°¡ ¾Ë°í ÀÖ´Â ³×Æ®¿öÅ© ÇÁ·ÎÅä ÄÝÀº µ¥ÀÌÅͺ£À̽º ¾È¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. À̰ÍÀº º¸Åë '/etc/protocols'ÆÄÀÏÀÌ¿¡¼­ ¾ò¾îÁö°Å³ª , ³×ÀÓ¼­ ¹ö¿¡ ÀÇÇØ µ¿µîÇÏ°Ô Á¦°øµÉ ¼ö ÀÖ´Ù. ´ç½ÅÀº getprotobynameÇÔ¼ö¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º³»¿¡¼­ ÇÁ·ÎÅäÄÝ À̸§¿¡ ¿¬°èµÈ ÇÁ·ÎÅäÄÝ ¹øÈ£¸¦ ã¾Æ ³¾ ¼ö ÀÖ´Ù.

¿©±â¿¡ ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º¸¦ ¾ï¼¼½ºÇϱâ À§ÇÑ À¯Æ¿¸®Æ¼µéÀÇ ÀÚ¼¼ÇÑ Á¤Àǰ¡ ÀÖ´Ù. À̰͵éÀº 'netdb.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

struct protoent ÀÚ·áÇü

ÀÌ ÀÚ·áÇüÀº ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽ºÀÇ Ç׸ñµé¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÙÀ½ ¸â¹ö¸¦ °¡Áø´Ù.

char *p_name

À̰ÍÀº ÇÁ·ÎÅäÄÝÀÇ °ø½ÄÀûÀÎ À̸§ÀÌ´Ù.

char **p_aliases

À̰͵éÀº ÇÁ·ÎÅäÄÝÀÇ ¶Ç´Ù¸¥ À̸§µéÀÌ´Ù. ¹®ÀÚ¿­ÀÇ ¹è¿­·Î µÇ¾î ÀÖÀ¸¸ç, ¹è¿­ÀÇ ¸¶Áö¸· ¿ä¼Ò´Â ³ÎÆ÷ ÀÎÅÍÀÌ´Ù.

int p_proto

À̰ÍÀº (È£½ºÆ® ¹ÙÀÌÆ®¼ø¼­·Î µÈ) ÇÁ·ÎÅäÄÝ ¹øÈ£ÀÌ´Ù. ¼ÒÄÏÀÇ protocolÀμö·Î ÀÌ ¸â¹ö¸¦ »ç¿ëÇ϶ó

±¸Ã¼ÀûÀÎ ÇÁ·ÎÅäÄÝ¿¡ °üÇÏ¿© ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇϱâ À§ÇØ getprotobyname°ú getprotobynumber¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Á¤ÀûÀ¸·Î ÇÒ´çµÈ ±¸Á¶Ã¼¿¡ Á¤º¸°¡ ¹ÝȯµÈ´Ù. ¿©·¯¹ø È£ÃâµÇ´Â °ÍÀ¸·ÎºÎÅÍ Á¤º¸¸¦ º¸È£Çϱâ À§ÇØ ±×°ÍÀ» º¹»çÇØ¾ß ³õ¾Æ¾ß ÇÑ´Ù.

struct protoent * getprotobyname (const char *name) ÇÔ¼ö

getprotobynameÇÔ¼ö´Â nameÀ̶ó´Â À̸§ÀÇ ³×Æ®¿öÅ©ÇÁ·ÎÅäÄÝ¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à °°Àº À̸§ÀÇ ÇÁ·ÎÅäÄÝÀÌ ¾øÀ¸¸é, ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

struct protoent * getprotobynumber (int protocol) ÇÔ¼ö

getprotobynumberÇÔ¼ö´Â protocolÀ̶ó´Â ¼ýÀÚ¸¦ °¡Áø ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝ¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ÀÌ·¯ÇÑ ÇÁ·ÎÅäÄÝÀÌ ¾ø´Ù¸é ³Î Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

setprotoent, getprotoent, endprotoent¸¦ »ç¿ëÇÏ¿© Àüü ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º¸¦ ÇÑ ¹ø¿¡ ÇÑ ÇÁ·ÎÅä Äݾ¿ Á¶»çÇÒ ¼ö ÀÖ´Ù. À̵é ÇÔ¼ö´Â ÀçÁøÀÔ¼ºÀ» °¡ÁöÁö ¾Ê±â ¶§¹®¿¡ ÁÖÀÇÇØ¼­ »ç¿ëÇØ¾ß ÇÑ´Ù.

void setprotoent (int stayopen) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â °Ë»öÀ» À§ÇØ ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º¸¦ ¿¬´Ù. ¸¸¾à stayopenÀμö°¡ 0ÀÌ ¾Æ´Ï¸é, getprotobyname ¶Ç´Â getproto-bynumberÀÇ È£ÃâÀÌ µ¥ÀÌÅͺ£À̽º¸¦ (º¸Åë ´Ý´Âµ¥) ´ÝÁö ¾Êµµ·Ï Çà ·¡±×¸¦ ¼¼Æ®ÇÑ´Ù. À̰ÍÀº ¿©·¯¹øÀÇ È£Ãâ·Î µ¥ÀÌÅͺ£À̽º°¡ ¿©·¯¹ø ¿­¸®Áö ¾Êµµ·Ï Çϴµ¥ ´õ¿í À¯¿ë ÇÏ´Ù

struct protoent * getprotoent (void) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽ºÀÇ ´ÙÀ½ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ´õ ÀÌ»óÀÇ Ç׸ñÀÌ ¾øÀ¸¸é ³ÎÆ÷ÀÎ Å͸¦ ¹ÝȯÇÑ´Ù.

void endprotoent (void) Function

ÀÌ ÇÔ¼ö´Â ÇÁ·ÎÅäÄÝ µ¥ÀÌÅͺ£À̽º¸¦ ´Ý´Â´Ù.

11.5.7 ÀÎÅÍ³Ý ¼ÒÄÏ ¿¹Á¦

¿©±â¿¡ ÀÎÅÍ³Ý À̸§°ø°£ ¾È¿¡ ¼ÒÄÏÀ» ¸¸µé°í À̸§Áþ´Â ¹æ¹ýÀ» º¸¿©ÁÖ´Â ¿¹Á¦°¡ ÀÖ´Ù. ÇÁ·Î±×·¥ÀÌ ¼ö ÇàµÇ´Â ÀåÄ¡¿¡ »õ·Î ¼ÒÄÏÀÌ ¸¸µé¾î Áø´Ù. ?;

ÀåÄ¡ÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ ã°í »ç¿ëÇÏ´Â °Í ´ë½Å, È£½ºÆ® ÁÖ¼Ò¿¡´Â INADDR_ANY¸¦ ¸í½ÃÇÏ¿´´Ù. ½Ã½º ÅÛÀº ÀåÄ¡ÀÇ ½ÇÁ¦ÁÖ¼Ò·Î ±×°ÍÀ» ´ëÄ¡ÇÑ´Ù.

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

int

make_socket (unsigned short int port)

{

int sock;

struct sockaddr_in name;

/* ¼ÒÄÏÀ» ¸¸µç´Ù */

sock = socket (PF_INET, SOCK_STREAM, 0);

if (sock < 0)

{

perror ("socket");

exit (EXIT_FAILURE);

}

/* ¼ÒÄÏ¿¡ À̸§À» ÁØ´Ù */

name.sin_family= AF_INET;

name.sin_port = htons (port);

name.sin_addr.s_addr = htonl (INADDR_ANY);

if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)

{

perror ("bind");

exit (EXIT_FAILURE);

}

return sock;

}

¿©±â¿¡ ¶Ç´Ù¸¥ ¿¹Á¦°¡ ÀÖ´Ù. À̰ÍÀº ÁÖ¾îÁø È£½ºÆ® À̸§¹®ÀÚ¿­°ú Æ÷Æ®¹øÈ£¸¦ sockaddr_in±¸Á¶Ã¼¾È ¿¡ ¾î¶»°Ô ³Ö´Â Áö¸¦ º¸¿©ÁØ´Ù:

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

void

init_sockaddr (struct sockaddr_in *name, const char *hostname,

unsigned short int port)

{

struct hostent *hostinfo;

name->sin_family = AF_INET;

name->sin_port = htons (port);

hostinfo = gethostbyname (hostname);

if (hostinfo == NULL)

{

fprintf (stderr, "Unknown host %s.\n", hostname);

exit (EXIT_FAILURE);

}

name->sin_addr = *(struct in_addr *) hostinfo->h_addr;

}

11.6 ´Ù¸§ À̸§°ø°£µé

´Ù¸¥ À̸§°ø°£°ú ÇÁ·ÎÅäÄÝÆÐ¹Ð¸®µéµµ Áö¿øµÇÁö¸¸ º°·Î »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ¾ÆÁ÷ ¹®¼­È­µÇÁö ¾Ê¾Ò´Ù. PF_NS´Â Xerox ³×Æ®¿öÅ© ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÄÝ¿¡ °ü·ÃµÈ °ÍÀÌ´Ù. PF_ISO ´Â °³¹æ½Ã½ºÅÛ»óÈ£¿¬°á (OSI)¿¡ °ü·ÃµÈ °ÍÀÌ´Ù. PF_CCITT´Â CCITTÀÇ ÇÁ·ÎÅäÄݵ鿡 °ü·ÃµÈ °ÍÀÌ´Ù. 'socket.h'¿¡ ½ÇÁ¦·Î ±¸ÇöµÇÁö ¾ÊÀº ±âÈ£¿Í ´Ù¸¥ À̸§ÀÇ ÇÁ·ÎÅäÄÝÀÌ Á¤ÀǵǾî ÀÖ´Ù.

PF_IMPLINK´Â È£½ºÆ®¿Í ÀÎÅÍ³Ý ¸Þ½ÃÁö 󸮱â¿ÍÀÇ Åë½Å¿¡ »ç¿ëµÈ´Ù. ÀÌ¿¡ °üÇÑ Á¤º¸¿Í °¡²û »ç ¿ëµÇ´Â Áö¿ª °æ·Î¼³Á¤ ÇÁ·ÎÅäÄÝÀÎ PF_ROUTE¿¡ °üÇÏ¿©´Â (¹Ì·¡¿¡ ³ª¿Ã) GNU Hurd ManualÀ» º¸ ¶ó.

11.7 ¼ÒÄÏ ¿­°í ´Ý±â

ÀÌ Àý¿¡¼­´Â ¼ÒÄÏÀ» ¿­°í ´Ù´Â ½ÇÁ¦ÀûÀÎ ¶óÀ̺귯¸® ÇÔ¼ö¿¡ °üÇÏ¿© ¼­¼úÇÑ´Ù. ¸ðµç À̸§°ø°£°ú ¿¬ °á½ºÅ¸ÀÏ¿¡ ´ëÇØ °°Àº ÇÔ¼ö°¡ »ç¿ëµÈ´Ù.

11.7.1 ¼ÒÄÏ ¸¸µé±â

¼ÒÄÏÀ» ¸¸µé±â À§Çؼ­´Â 'sys/socket.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Â ¼ÒÄÏÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

int socket (int namespace, int style, int protocol) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼ÒÄÏÀ» ¸¸µé°í Åë½Å½ºÅ¸ÀÏ styleÀ» ¸í½ÃÇÑ´Ù. Åë½Å½ºÅ¸ÀÏÀº 11.2Àý[Åë½Å½ºÅ¸ÀÏ],150ÂÊ¿¡ ¿­ °ÅµÈ ¼ÒÄÏ ½ºÅ¸ÀÏÁß Çϳª¸¦ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. namespaceÀμö´Â À̸§°ø°£À» ¸í½ÃÇϰí, PF_FILEÀ̰гª PF_INETÀ̾î¾ß ÇÑ´Ù( 11.4Àý[ÆÄÀÏ À̸§°ø°£],153ÂÊ, 11.5Àý[ÀÎÅÍ³Ý À̸§°ø°£],155ÂÊÀ» º¸¶ó). protocolÀº ÇÁ·ÎÅäÄÝÀ» Á¤ÇÑ´Ù (11.1Àý [¼ÒÄϰ³³ä],149ÂÊÀ» º¸¶ó); protocol¿¡´Â º¸Åë 0ÀÌ »ç¿ëµÈ´Ù. socketÀ¸·ÎºÎÅÍÀÇ ¹Ýȯ°ªÀº »õ·Î¿î ¼ÒÄÏÀÇ ÆÄÀϼ­¼úÀÚÀÌ´Ù. ¿¡·¯°¡ ¹ß»ýÇϸé -1ÀÌ ¹ÝȯµÈ´Ù. ´ÙÀ½ Àº ÀÌ ÇÔ¼ö°¡ Á¤ÀÇÇØ ³õÀº ¿¡·¯ »óȲ errnoÀÌ´Ù:

EPROTONOSUPPORT

The protocol or style is not supported by the namespace specified.

EMFILE ÇÁ·Î¼¼½º°¡ ÀÌ¹Ì ³Ê¹« ¸¹Àº ÆÄÀϼ­¼úÀÚµéÀ» ¿­¾î ³õ¾Ò´Ù.

ENFILE ½Ã½ºÅÛÀÌ ÀÌ¹Ì ³Ê¹« ¸¹Àº ÆÄÀϼ­¼úÀÚµéÀ» ¿­¾î ³õ¾Ò´Ù.

EACCESS ÇÁ·Î¼¼½º°¡ ¸í½ÃµÈ styleÀ̳ª protocol¿¡ ¸Â´Â ¼ÒÄÏÀ» ¸¸µé ¼ö ±ÇÇÑÀ» °®°í ÀÖÁö ¾Ê´Ù.

ENOBUFS ½Ã½ºÅÛ ³»ºÎ ¹öÆÛ °ø°£ÀÌ ºÎÁ·ÇÏ´Ù.

socket ÇÔ¼ö¿¡ ÀÇÇØ ¹ÝȯµÇ´Â ÆÄÀϼ­¼úÀÚ´Â Àбâ¿Í ¾²±â ±â´É ¸ðµÎ¸¦ Áö¿øÇÑ´Ù. ±×·¯³ª ÆÄÀÌÇÁ °°Àº ¼ÒÄϵéÀº ÆÄÀÏ À§Ä¡¿¡ °üÇÑ µ¿ÀÛÀº ÇÏÁö ¸øÇÑ´Ù. socketÇÔ¼ö¸¦ ¾î¶»°Ô È£ÃâÇÏ´Â Áö¿¡ ´ëÇÑ ¿¹´Â 11.4 Àý [ÆÄÀÏ À̸§°ø°£],153ÂÊ, ¶Ç´Â 11.5.7Àý [Inet ¿¹Á¦],163ÂÊÀ» º¸¶ó.

11.7.2 ¼ÒÄÏ ´Ý±â

¼ÒÄÏÀÇ »ç¿ëÀÌ ³¡³ª¸é, °£´ÜÈ÷ ±× ÆÄÀϼ­¼úÀÚ¸¦ closeÇÔ¼ö¸¦ ÀÌ¿ëÇØ ´ÝÀ¸¸é µÈ´Ù; 8.1Àý [ÆÄÀÏ ¿­°í ´Ý±â], 103ÂÊÀ» º¸¶ó. ¸¸¾à ¿¬°áÀ» ÅëÇÏ¿© Àü¼ÛµÇ±â¸¦ ±â´Ù¸®´Â µ¥ÀÌÅͰ¡ ¿©ÀüÈ÷ ÀÖÀ¸¸é, º¸Åë close ´Â ÀÌ Àü¼ÛÀÌ ¿Ï·áµÇµµ·Ï ½ÃµµÇÑ´Ù. SO_LINGER¼ÒÄÏ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ½Ã°£Á¦ÇÑ Áֱ⸦ ¸í½ÃÇØ ÁÖ ¸é, ÀÌ °úÁ¤À» Á¦¾îÇÒ ¼ö ÀÖ´Ù. 11.11Àý [¼ÒÄÏ ¿É¼Ç],180ÂÊÀ» º¸¶ó.

´ç½ÅÀº 'sys/socket.h'¿¡ ¼­¼úµÇ¾î ÀÖ´Â shutdownÀ» È£ÃâÇÏ¹Ç·Î½á ¿¬°áÇÏÀÇ ¼Û½Å¸¸ ¶Ç´Â ¼ö½Å¸¸À» Á¾·á½Ãų ¼ö ÀÖ´Ù.

int shutdown (int socket, int how ) ÇÔ¼ö

shutdownÇÔ¼ö´Â socketÀ̶ó´Â ¼ÒÄÏÀÇ ¿¬°áÀ» Á¾·á½ÃŲ´Ù. howÀμö´Â ¾î¶² ±â´ÉÀ» ¼öÇàÇÒ °ÍÀΰ¡¸¦ ¸í½ÃÇÑ´Ù.

0 ÀÌ ¼ÒÄÏÀ¸·ÎºÎÅÍ µ¥ÀÌÅÍ ¼ö½ÅÀ» Áß´ÜÇÑ´Ù. ¸¸¾à ´õ ÀÌ»óÀÇ µ¥ÀÌÅͰ¡ µµÂøÇϸé, ±×°ÍÀ» ¹«½ÃÇÑ´Ù.

1 ÀÌ ¼ÒÄÏÀ¸·ÎÀÇ Àü¼ÛÀ» Áß´ÜÇÑ´Ù. º¸³»±â À§ÇØ ´ë±âÁßÀÎ µ¥ÀÌÅÍ´Â Ãë¼ÒµÈ´Ù. ÀÌ¹Ì º¸³½ µ¥ÀÌÅÍÀÇ ÀÀ´äÀ» ±â´Ù¸®´Â °Íµµ Áß´ÜÇÑ´Ù. ¸¸¾à ±×°ÍÀ» ÀÒ¾î¹ö¸±Áö¶óµµ ÀçÀü¼ÛÇÏÁö ¾Ê´Â´Ù.

2 ¼ö½Å°ú ¼Û½Å ¸ðµÎ¸¦ Áß´ÜÇÑ´Ù.

¼º°øÇÏ¸é ¹Ýȯ°ªÀÌ 0À̰í, ½ÇÆÐ¸é -1ÀÌ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀÇ µÇ¾î ÀÖ´Â errno ¿¡·¯ »óȲÀÌ´Ù:

EBADF socketÀÌ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK socketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

ENOTCONN socketÀÌ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù

11.7.3 ¼ÒÄÏ ½Ö

¼ÒÄϽÖÀº ¿¬°áµÈ (±×·¯³ª À̸§¾ø´Â) ¼ÒÄÏÀÇ ½ÖÀ¸·Î ±¸¼ºµÈ´Ù. ±×°ÍÀº pipe¿Í À¯»çÇÏ°í ¹«Ã´ °°Àº ¹æ ¹ýÀ¸·Î »ç¿ëµÈ´Ù. ¼ÒÄϽÖÀº 'sys/socket.h'¿¡ ¼±¾ðµÈ socketpairÇÔ¼ö·Î ¸¸µé¾îÁø´Ù. ¼ÒÄϽÖÀº ÆÄÀÌÇÁ ¿Í ´ë´ÜÈ÷ À¯»çÇÏ´Ù:

ÁÖµÈ Â÷ÀÌÁ¡Àº ¼ÒÄϽÖÀº ¾ç¹æÇâÀ̶ó´Â °ÍÀÌ´Ù. ÆÄÀÌÇÁ´Â ÇϳªÀÇ ÀԷ¸¸ µÇ´Â Âʰú Ãâ·Â¸¸ µÇ´Â ÇÑ Âʸ¸À» °¡Áö°í ÀÖ´Ù. (10Àå[Pipe¿Í FIFO]¸¦ º¸¶ó 145ÂÊ)

int socketpair (int namespace, int style, int protocol, int filedes[2]) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼ÒÄϽÖÀ» ¸¸µé¸ç, filedes[0]°ú filedes[1]¾È¿¡ ÆÄÀϼ­¼úÀÚ¸¦ ¹ÝȯÇÑ´Ù. ¼ÒÄϽÖÀº ÀüÀÌÁß (full-duplex)¼º Åë½Å ä³ÎÀ̱⠶§¹®¿¡ ÇÑÂÊ¿¡¼­ Àаųª ¾²±â°¡ °¡´ÉÇÏ´Ù. namespace,style,protocolÀÎ ÀÚ´Â socketÇÔ¼ö¿¡¼­ ó·³ ÇØ¼®µÈ´Ù. styleÀº 11.2Àý[Åë½Å½ºÅ¸ÀÏ]¿¡ ³ª¿­µÈ °ÍÀÌ´Ù. namespaceÀÎÀÚ ´Â À̸§°ø°£À» ¸í½ÃÇϸç, ¹Ýµå½Ã AF_FILEÀ̾î¾ß ÇÑ´Ù. (11.4Àý[ÆÄÀÏÀ̸§°ø°£],153ÂÊÀ» ÂüÁ¶Ç϶ó); protocolÀº Åë½Å ÇÁ·ÎÅäÄÝÀ» ¼­¼úÇϰí 0µµ ÀǹÌÀÖ´Â °ªÀÌ´Ù. ¸¸¾à style ÀÌ ºñ¿¬°áÅë½Å½ºÅ¸Àϸ¦ ¸í ½ÃÇϸé, ´ç½ÅÀÌ ¾ò°Ô µÇ´Â µÎ ¼ÒÄÏÀº¿¬°áµÇÁö ¾Ê´Â´Ù. ¾ö¹ÐÈ÷ ¸»ÇØ, ±×µé °¢°¢Àº ¼­·ÎÀÇ ¸ñÀûÁö ÁÖ¼Ò ¸¦ ¾Ë°í ÀÖ¾î, ¼­·Î¿¡°Ô ÆÐŶÀ» º¸³¾¼ö ÀÖ°Ô µÈ´Ù.

socketpairÇÔ¼ö´Â ¼º°ø½Ã¿¡ 0À», ½ÇÆÐ½Ã¿¡ -1À» ¹ÝȯÇÑ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀǵǾî ÀÖ´Â errno¿¡ ·¯ »óȲÀÌ´Ù:

EMFILE ÇÁ·Î¼¼½º°¡ ³Ê¹« ¸¹Àº ÆÄÀÏ ¼­¼úÀÚ¸¦ ¿­¾î ³õ°í ÀÖ´Ù.

EAFNOSUPPORT ¸í½ÃµÈ À̸§°ø°£ÀÌ Áö¿øµÇÁö ¾Ê´Â °ÍÀÌ´Ù.

EPROTONOSUPPORT ¸í½ÃµÈ ÇÁ·ÎÅäÄÝÀÌ Áö¿øµÇÁö ¾Ê´Â °ÍÀÌ´Ù.

EOPNOTSUPP ¸í½ÃµÈ ÇÁ·ÎÅäÄÝÀÌ ¼ÒÄϽÖÀ» ¸¸µå´Â °ÍÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

11.8 ¿¬°áÇϴµ¥ ¼ÒÄÏ»ç¿ë

´ëºÎºÐÀÇ Åë½Å ½ºÅ¸ÀÏÀº ƯÁ¤ÇÑ ´Ù¸¥ ¼ÒÄϰú ¿¬°áÀ» ¸¸µé°í ¼ÒÄϰú ¼ÒÄÏÀ» ÅëÇÏ¿© µ¥ÀÌÅ͸¦ ±³È¯ ÇÑ´Ù. ¿¬°áÀ» ¸¸µå´Â °ÍÀº ºñ´ëĪÀÌ´Ù.; ÇÑÂÊ(Ŭ¶óÀ̾ðÆ®)´Â ´Ù¸¥ ÂÊ(¼­¹ö)ÀÌ ¼ÒÄÏÀ» ¸¸µé°í ¿¬°á¿ä±¸ ¸¦ ±â´Ù¸±¶§±îÁö ¿¬°áÀ» ¿ä±¸Çϵµ·Ï µÇ¾î ÀÖ´Ù.

o 11.8.1Àý [¿¬°áÇϱâ], 166ÂÊÀº Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ¼­¹ö¿Í ¿¬°áÀ» ÃʱâÈ­Çϱâ À§ÇØ ¹«¾ùÀ» ÇØ¾ß ÇÏ´ÂÁö¸¦ ¼­¼úÇÑ´Ù.

o 11.8.2Àý [µè±â],167Âʰú 11.8.3[¿¬°áÀ» ¼ö¶ôÇϱâ], 167ÂÊ¿¡¼­´Â ¼­¹ö ÇÁ·Î±×·¥ÀÌ Å¬¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¿¬°á¿ä±¸¸¦ ±â´Ù¸®°í ¹Þ¾ÆµéÀÌ´Â °Í¿¡ ´ëÇÑ ¼­¼úÀ» ÇÑ´Ù.

o 11.8.5[µ¥ÀÌÅÍ Àü¼Û], 169ÂÊÀº ¾î¶»°Ô ¿¬°áµÈ ¼ÒÄÏÀ» ÅëÇÏ¿© µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ¹æ¹ýÀ» ¼­¼úÇÑ´Ù.

11.8.1 ¿¬°á ¸¸µé±â

¿¬°áÀ» ¸¸µé ¶§, Ŭ¶óÀÌ¾ðÆ®´Â ¼­¹ö°¡ ¿¬°áÀ» ±â´Ù¸®°í ¼ö¶ôÇÏ´Â µ¿¾È ¿¬°áÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ¿©±â ¿¡ Ŭ¶óÀÌ¾ðÆ®°¡ 'sys/socket.h'¿¡ ¼±¾ðµÈ connectÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¹«¾ùÀ» ÇØ¾ß ÇÒ °ÍÀÎÁö¸¦ ³íÀÇÇÏ °í ÀÖ´Ù.

int connect (int socket, struct sockaddr *addr, size_t length) ÇÔ¼ö

connectÇÔ¼ö´Â addr¿Í lengthÀÇ ±æÀÌ·Î ¸í½ÃµÈ ÁÖ¼Ò¸¦ °¡Áö´Â ¼ÒÄÏÀÇ socketÀ̶ó´Â ÆÄÀϼ­¼úÀÚ¸¦ ÀÌ ¿ëÇÏ¿© ¼ÒÄÏÀ¸·ÎºÎÅÍ ¿¬°áÀ» ÃʱâÈ­ ÇÑ´Ù. (ÀÌ ¼ÒÄÏÀº ÀüÇüÀûÀ¸·Î ´Ù¸¥ ÀåÄ¡ÀÇ °ÍÀÌ´Ù. ±×°ÍÀº ¼­¹ö ó·³ ÀÌ¹Ì ¼³Á¤µÇ¾î¾ß ÇÑ´Ù.) ÀÌ ÀμöµéÀÌ ¾î¶»°Ô ÇØ¼®µÇ´ÂÁö¿¡ °üÇÑ Á¤º¸´Â 11.3Àý[¼ÒÄÏÁÖ¼Ò],150 ÂÊÀ» º¸¶ó

º¸Åë, connect´Â ¼­¹ö°¡ ¿ä±¸¿¡ ÀÀ´äÇÒ¶§±îÁö ±â´Ù¸°ÈÄ ¹ÝȯÇÏ°Ô µÈ´Ù. ÀÀ´äÀ» ±â´Ù¸®Áö ¾Ê°í Áï½Ã ¹ÝȯÇϵµ·Ï ¼ÒÄÏ socketÀ» ºí·ÏÅ·µÇÁö ¾Êµµ·Ï(non-blocking) ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå ¿¡ °üÇÑ Á¤º¸´Â 8.10Àý [ÆÄÀÏ »óÅ Ç÷¢], 116ÂÊÀ» º¸¶ó.

connect·ÎºÎÅÍÀÇ ¹Ýȯġ´Â º¸Åë 0ÀÌ´Ù. ¸¸¾à ¿¡·¯°¡ ¹ß»ý½Ã¿¡´Â -1À» ¹ÝȯÇÑ´Ù. ÀÌ ÇÔ¼ö¿¡ ¼±¾ðµÇ¾î ÀÖ´Â errno¿¡·¯ »óȲÀº ´ÙÀ½°ú °°´Ù.

EBADF ¼ÒÄÏsocketÀÌ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK ¼ÒÄÏsocketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EADDRNOTAVAIL ¸í½ÃµÈ ÁÖ¼Ò°¡ ¿ø°ÝÀåÄ¡(»ó´ë¹æ±â±â)¿¡ »ç¿ëÇÒ¼ö ¾ø´Â °ÍÀÌ´Ù.

EAFNOSUPPORT addrÀÇ À̸§°ø°£ÀÌ ÀÌ ¼ÒÄÏ¿¡¼­ Áö¿øÇÏÁö ¾Ê´Â °ÍÀÌ´Ù.

EISCONN ¼ÒÄÏsocketÀÌ ÀÌ¹Ì ¿¬°áµÇ¾î ÀÖ´Ù.

ETIMEDOUT ¿¬°á¼³Á¤À» ½ÃµµÇÏ´Ù°¡ ½Ã°£À» ÃʰúÇÏ¿´´Ù.

ECONNREFUSED ¼­¹ö°¡ ¿¬°á¼³Á¤À» Á÷Á¢ °ÅÀýÇÏ¿´´Ù.

ENETUNREACH ÁÖ¾îÁø addrÀÇ ³×Æ®¿öÅ©´Â ÀÌ È£½ºÆ®·ÎºÎÅÍ µµ´ÞÇÒ¼ö ¾ø´Ù.

EADDRINUSE ÁÖ¾îÁø addrÀÇ ¼ÒÄÏÁÖ¼Ò°¡ ÀÌ¹Ì »ç¿ë ÁßÀÌ´Ù.

EINPROGRESS ¼ÒÄÏsocketÀÌ ºí·ÏÅ·µÇÁö ¾Ê´Â °ÍÀ̰í, ¿¬°áÀ» Áï½Ã ¼³Á¤ÇÒ¼ö ¾ø¾ú´Ù.

EALREADY ¼ÒÄÏsocketÀÌ ºí·ÏÅ·µÇÁö ¾Ê´Â °ÍÀ̰í, ÀÌ¹Ì ÁøÇàÁßÀÎ ¹Ì°áÁ¤ÀÇ ¿¬°áÀÌÀÖ´Ù.

11.8.2 ¿¬°á µè±â

ÀÌÁ¦ ¼­¹öÇÁ·Î¼¼½º°¡ ¼ÒÄÏ¿¡¼­ ¿¬°áÀ» ¼ö¶ôÇϱâ À§ÇØ ¹«¾ùÀ» ÇØ¾ß ÇÏ´ÂÁö °í·ÁÇØº¸ÀÚ. À̰ÍÀº listenÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼ÒÄÏ¿¡¼­ ¿¬°á¿ä±¸¸¦ °¡´ÉÇÏ°Ô ÇÏ°í ³ª¼­, acceptÇÔ¼ö (11.8.3Àý [¿¬°á¼ö¶ô], 167ÂÊÀ» º¸¶ó)À» »ç¿ëÇÏ¿© ¿ä±¸¸¦ ¹Þ¾ÆµéÀÌ´Â °ÍÀ» Æ÷ÇÔÇÑ´Ù. listenÇÔ¼ö´Â ºñ¿¬°á Åë½Å ½ºÅ¸ÀÏÀ» Áö ¿øÇÏÁö ¾Ê´Â´Ù. ¿¬°á ¿ä±¸°¡ ÀÖÀ» ¶§±îÁö ¼öÇàÀ» ½ÃÀÛÇÏÁö ¾Êµµ·Ï ³×Æ®¿öÅ© ¼­¹ö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. 11.10.1Àý[Inetd ¼­¹öµé], 179ÂÊÀ» º¸¶ó.

ÀÎÅÍ³Ý À̸§°ø°£¿¡¼­, ÇÑ Æ÷Æ®·ÎÀÇ ¿¬°á¿¡ Á¢±ÙÀ» Á¦¾îÇÏ´Â º¸È£ ¸ÞÄ«´ÏÁòÀÌ ¾ø´Ù. ¾î¶² ÀåÄ¡¿¡¼­ ¾î¶² ÇÁ·Î¼¼½º°¡ ´ç½ÅÀÇ ¼­¹ö¿¡ ¿¬°áÀ» ¸¸µé ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ ´ç½ÅÀÇ ¼­¹ö¿¡ Á¢±ÙÀ» Á¦¾îÇϱ⠸¦ ¿øÇÑ´Ù¸é, ¿¬°á¿ä±¸¿¡ ¿¬°èµÈ ÁÖ¼Ò¸¦ °Ë»çÇϰųª, ´Ù¸¥ Çù»ó°úÁ¤À̳ª ½Äº°±â´ÉÀÌ ÀÖ´Â ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇÏ¸é µÈ´Ù.

ÆÄÀÏ À̸§°ø°£¿¡¼­, º¸Åë ÆÄÀÏ º¸È£ ºñÆ®´Â ¼ÒÄÏ ¿¬°á¿¡ Á¢±ÙÇÏ´Â »ç¶÷À» Á¦¾îÇÒ ¼ö ÀÖ´Ù.

int listen (int socket, unsigned int n) ÇÔ¼ö

listenÇÔ¼ö´Â ¼ÒÄÏsocketÀ» ¿¬°áÀ» ¼ö¶ôÀÌ °¡´ÉÇϵµ·Ï ÇÏ¿©, ±×°ÍÀ» ¼­¹ö¼ÒÄÏÀ¸·Î ¸¸µç´Ù.

Àμö nÀº ¹Ì°áµÈ ¿¬°áÀÇ Å¥ÀÇ ±æÀ̸¦ ¸í½ÃÇÑ´Ù.

listenÇÔ¼ö´Â ¼º°ø½Ã¿¡ 0À» ½ÇÆÐ½Ã -1À» ¹ÝȯÇϸç, ÀÌ ÇÔ¼ö¿¡ Á¤ÀÇµÈ errno¿¡·¯ »óȲÀº ´ÙÀ½°ú °°´Ù.

EBADF Àμösocket´Â À¯È¿ÇÑ ÆÄÀϼ­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK ÀμösocketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EOPNOTSUPP ¼ÒÄÏsocket´Â ÀÌ ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

11.8.3 ¿¬°á ¼ö¶ô

¼­¹ö°¡ ¿¬°á¿ä±¸¸¦ ¼ö½ÅÇÏ¿´À» ¶§, ¿¬°á¿ä±¸¸¦ ¼ö¶ôÇÔÀ¸·Î½á ¿¬°áÀÌ ³¡³¯ ¼ö ÀÖ´Ù. acceptÇÔ¼ö¸¦ »ç ¿ëÇÏ¿© ±×°ÍÀ» ¼öÇàÇÑ´Ù. ¼­¹ö·Î ¼³Á¤µÈ ¼ÒÄÏÀº ¿©·¯ Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍÀÇ ¿¬°á¿ä±¸¸¦ ¼ö¶ôÇÒ ¼ö ÀÖ ´Ù. ¼­¹öÀÇ ¿ø ¼ÒÄÏ(original socket)Àº ¿¬°áÀÇ ºÎºÐÀÌ µÇÁö ¾Ê´Â´Ù. ´ë½Å¿¡, accept´Â ¿¬°á¿¡ ƯÁ¤ÇÑ »õ·Î¿î ¼ÒÄÏÀ» ¸¸µç´Ù. accpect´Â ÀÌ ¼ÒÄÏ¿¡ ´ëÇÑ ¼­¼úÀÚ¸¦ ¹ÝȯÇÑ´Ù.

¼­¹öÀÇ ¿ø ¼ÒÄÏÀº ´ÙÀ½ ¿¬°á¿ä±¸¸¦ µè±â À§ÇÏ¿© °è¼Ó ³²¾ÆÀÖ´Ù.

¼­¹ö¼ÒÄÏÀÇ ºñ°áµÈ ¿¬°á¿ä±¸ÀÇ ¼ö´Â Á¦ÇѵǾî ÀÖ´Ù. ¸¸¾à Ŭ¶óÀÌ¾ðÆ®µé·Î ºÎÅÍÀÇ ¿¬°á ¿ä±¸°¡ ¼­¹ö °¡ ±×°ÍÀ» ó¸®ÇÒ ¼ö ÀÖ´Â °Å º¸´Ù ´õ ºü¸£´Ù¸é, Å¥°¡ °¡µæÃ¤¿ö Áú °ÍÀ̰í, Ãß°¡ÀûÀÎ ¿ä±¸´Â ECONNREFUSED¿¡·¯·Î °ÅÀý µÈ´Ù. ºñ·Ï ½Ã½ºÅÛ ³»ºÎÀÇ Å¥°¡ Á¦ÇѵǾî ÀÖÀ» Áö¶óµµ listenÇÔ¼öÀÇ Àμö·Î ÀÌ Å¥ÀÇ ÃÖ´ë ±æÀ̸¦ ¸í½ÃÇÒ ¼ö ÀÖ´Ù.

int accept (int socket, struct sockaddr *addr, size_t *length_ptr)

ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ¼­¹ö¼ÒÄÏ socketÀÇ ¿¬°á¿ä±¸¸¦ ¼ö¶ôÇϴµ¥ »ç¿ëµÈ´Ù. ¸¸¾à ¹Ì°áµÈ ¿¬°áÀÌ ¾ø°í ¼ÒÄÏ socketÀÌ ºí·ÏÅ·µÇµµ·Ï ¼¼Æ®µÇ¾îÀÖÀ¸¸é acceptÇÔ¼ö´Â °è¼Ó ±â´Ù¸°´Ù. (ºí·ÏÅ· ¾ÈµÇ´Â ¼ÒÄÏÀ¸·Î ±â´Ù ¸®°ÔÇϵµ·Ï ¼±ÅÃÇÒ ¼öµµ ÀÖ´Ù.) ºí·ÏÅ· ¾ÈµÇ´Â ¸ðµå¿¡ °üÇÑ Á¤º¸´Â 8.10Àý [ÆÄÀÏ »óÅ Ç÷¢], 116ÂÊÀ» º¸¶ó. addr°ú length_ptrÀμö´Â ÃʱâÈ­µÈ ¿¬°áÀÇ Å¬¶óÀÌ¾ðÆ® ¼ÒÄÏÀÇ À̸§¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇϴµ¥ »ç¿ëµÈ´Ù. 11.3Àý [¼ÒÄÏÁÖ¼Ò], 150ÂÊ¿¡ Á¤º¸Æ÷¸Ë¿¡ °üÇÑ Á¤º¸°¡ ÀÖ´Ù. {{}}

¿¬°áÀ» ¼ö¶ôÇÏ´Â °ÍÀº socketºÎºÐÀ» ¿¬°áÀÇ ÀϺηΠ¸¸µéÁö ¾Ê´Â´Ù. ´ë½Å¿¡, ¿¬°áµÉ »õ·Î¿î ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù. acceptÀÇ Á¤»óÀûÀÎ ¹Ýȯġ´Â »õ·Î¿î ¼ÒÄÏÀÇ ÆÄÀϼ­¼úÀÚÀÌ´Ù. acceptÈÄ¿¡, ¿ø·¡ÀÇ ¼ÒÄÏÀÎ socketÀº ¿­·Á ÀÖ°í, ¿¬°áµÇÁö ¾ÊÀº »óÅ·Π³²¾ÆÀÖ°Ô µÈ´Ù. ±×¸®°í ±×°ÍÀÌ ´ÝÈú ¶§±îÁö µè±â¸¦ °è¼Ó ÇÒ °ÍÀÌ´Ù. accept¸¦ È£ÃâÇÏ¿© ÀÌ ¼ÒÄÏÀ» ÅëÇÏ¿© Ãß°¡ÀûÀÎ ¿¬°áÀ» ¼ö¶ôÇÒ ¼ö ÀÖ´Ù.

¸¸¾à ¿¡·¯°¡ ¹ß»ýÇϸé accept´Â -1À» ¹ÝȯÇÑ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀǵǾî ÀÖ´Â errno¿¡·¯Á¶°ÇÀÌ´Ù:

EBADF socketÀμö°¡ À¯È¿ÇÑ ÆÄÀϼ­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK ¼­¼úÀÚ socketÀμö°¡ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EOPNOTSUPP ¼­¼úÀÚ socketÀÌ ÀÌ ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.

EWOULDBLOCK socketÀÌ ºí·ÏÅ·¾ÈµÇ´Â ¸ðµå·Î ¼¼Æ®µÇ¾î ÀÖ°í, Áï½Ã ¿¬°áµÉ ¼ö ÀÖ´Â ¹Ì°áÀÇ ¿¬°áÀÌ ¾ø´Ù.

acceptÇÔ¼ö´Â ºñ¿¬°á¼º Åë½Å ½ºÅ¸ÀÏÀÇ ¼ÒÄÏ¿¡´Â »ç¿ëµÉ ¼ö ¾ø´Ù.

11.8.4 ´©°¡ ³ª¿¡°Ô ¿¬°áµÇ¾î ÀÖ³ª?

int getpeername (int socket, struct sockaddr *addr, size_t *length_ptr) ÇÔ¼ö

getpeernameÇÔ¼ö´Â socketÀÌ ¿¬°áµÇ¾î ÀÖ´Â ¼ÒÄÏÀÇ ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù; addr°ú lengh_ptr¿¡ ÀÇÇØ ¸í½Ã µÈ ¸Þ¸ð¸® °ø°£¿¡ ±× ÁÖ¼Ò°¡ ÀúÀåµÈ´Ù. *length_ptr¾È¿¡ ÁÖ¼ÒÀÇ ±æÀ̸¦ ÀúÀåÇÑ´Ù.

ÁÖ¼ÒÀÇ Æ÷¸Ë¿¡ °üÇÏ¿©´Â 11.3Àý [¼ÒÄÏ ÁÖ¼Ò], 150ÂÊÀ» º¸¶ó. ¾î¶² ¿î¿µÃ¼Á¦¿¡¼­, getpeernameÀº ´ÜÁö ÀÎÅÍ³Ý µµ¸ÞÀÎÀÇ ¼ÒÄÏ¿¡¼­¸¸ µ¿ÀÛÇÑ´Ù.

¼º°ø½Ã¿¡ 0À» ½ÇÆÐ½Ã¿¡ -1À» ¹ÝȯÇÑ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀǵÈ

errno¿¡·¯Á¶°ÇÀÌ´Ù:

EBADF socketÀμö°¡ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK socket¼­¼úÀÚ°¡ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

ENOTCONN socket¼ÒÄÏÀÌ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù.

ENOBUFS ÃæºÐÇÑ ³»ºÎ ¹öÆÛ°¡ ¾ø´Ù.

11.8.5 µ¥ÀÌÅÍ Àü¼Û

ÀÏ´Ü ¼ÒÄÏÀÌ »ó´ëÃø°ú ¿¬°áÀÌ µÇ¸é, µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ÀϹÝÀûÀÎ write¿Í read µ¿ÀÛÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. (8.2Àý [I/O Ãß»ó], 105ÂÊÀ» º¸¶ó) ¼ÒÄÏÀº ¾ç¹æÇâ ä³ÎÀ̹ǷΠÇÑÂÊ¿¡¼­ ÀÐ°í ¾²±â°¡ °¡´ÉÇÏ´Ù.

¼ÒÄÏÀÇ µ¿ÀÛÀ» ¸í½ÃÇÏ´Â ¸î°¡Áö I/O¸ðµå°¡ ÀÖ´Ù. ±×·¯ÇÑ ¸ðµå¸¦ ¸í½ÃÇÏ·Á¸é, ´õ ÀϹÝÀûÀÎ read¿Í write´ë½Å¿¡ recv¿Í send ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. recv¿Í sendÇÔ¼ö´Â Ưº°ÇÑ I/O¸ðµå¸¦ Á¦¾îÇϱâ À§ ÇÑ ¿©·¯°¡Áö Ç÷¢À» ¸í½ÃÇϴµ¥ »ç¿ëµÇ´Â Ãß°¡ÀûÀÎ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¿¹¸¦µé¾î out-of-band µ¥ÀÌ Å͸¦ Àаųª ¾²±â À§ÇÏ¿© MSG_OOBÇ÷¢À» ¸í½ÃÇÒ ¼ö ÀÖ°í, ÀÔ·ÂÀ» ¿³º¸±â À§ÇÏ¿© MSG_PEEK¸¦ ¼¼Æ®Çϰųª, Ãâ·Â½Ã ¶ó¿ìÆÃÁ¤º¸ÀÇ Æ÷ÇÔÀ» Á¦¾îÇϱâ À§ÇÏ¿© MSG_DONTROUTEÇ÷¢À» ¸í½ÃÇÒ ¼ö ÀÖ ´Ù.

11.8.5.1 µ¥ÀÌÅÍ º¸³»±â

sendÇÔ¼ö´Â 'sys/socket.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ¸¸¾à flagÀμö¸¦ 0À¸·Î ÇÏ´Â °æ¿ì¸é, send´ë½Å¿¡ write ¸¦ ¾µ ¼ö ÀÖ´Ù.; 8.2Àý [I/O Ãß»ó], 105ÂÊÀ» º¸¶ó. ¸¸¾à ¼ÒÄÏÀÌ ¿¬°áµÇ¾î ÀÖ´Â »óŶó¸é, send³ª write ¸¦ »ç¿ëÇÒ ¶§ SIGPIPE¶ó´Â ½Ã±×³ÎÀ» ¾òÀ» °ÍÀÌ´Ù. (21.2.6Àý [¿©·¯°¡Áö ½Ã±×³Î], 278ÂÊÀ» º¸¶ó)

int send (int socket, void *buffer, size_t size, int flags) ÇÔ¼ö

sendÇÔ¼ö´Â write¿Í ºñ½ÁÇÏÁö¸¸, Ãß°¡ÀûÀÎ flags¶ó´Â Ç÷¢À» °¡Áö°í ÀÖ´Ù. flags¿¡ °¡´ÉÇÑ °ªµéÀº 11.8.5.3Àý[¼ÒÄÏ µ¥ÀÌÅÍ ¿É¼Ç], 170ÂÊ¿¡ ¼­¼úµÇ¾î ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â Àü¼ÛµÈ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¹ÝȯÇϸç, ½ÇÆÐ½Ã -1À» ¹ÝȯÇÑ´Ù. ¸¸¾à ¼ÒÄÏÀÌ ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå¶ó¸é, send°¡ (writeó·³) µ¥ÀÌÅÍÀÇ ÀϺΠ¸¸ Àü¼ÛÇÑ µÚ ¹ÝȯµÉ °ÍÀÌ´Ù. ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå¿¡ °üÇÏ¿©´Â 8.10Àý [ÆÄÀÏ »óÅ Ç÷¢] 116ÂÊÀ» º¸¶ó. ¾î°°Å³ª, ¼º°ø½ÃÀÇ ¹Ýȯġ´Â ¿¡·¯¾øÀÌ Àü¼ÛµÈ ¸Þ½ÃÁö¸¦ °¡¸®Å³ »Ó, ¿¡·¯¾øÀÌ ¼ö½ÅµÇ´Â °Í ó·³ ÇʼöÀûÀÎ °ÍÀÌ ¾Æ´Ô¿¡ ÁÖÀÇÇ϶ó.

´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ Á¤ÀÇµÈ errno¿¡·¯ Á¶°ÇÀÌ´Ù.

EBADF socketÀμö°¡ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

EINTR µ¥ÀÌÅ͸¦ º¸³»±â Àü¿¡, ½Ã±×³Î¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®°¡ °É·È´Ù. 21.5Àý [ÀÎÅÍ·´Æ® Ãß»ó] 293ÂÊÀ» º¸¶ó.

ENOTSOCK socket¼­¼úÀÚ°¡ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EMSGSIZE ¼ÒÄÏÁ¾·ù°¡ ¸Þ½ÃÁö¸¦ ÀÛ°Ô º¸³¾ °ÍÀ» ¿ä±¸Çϴµ¥, ÀÌ ¸Þ½ÃÁö°¡ ³Ê¹« Å©´Ù.

EWOULDBLOCK

ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå°¡ ¼ÒÄÏ¿¡ ¼¼Æ®µÇ¾î ÀÖÀ¸³ª, ¾²±â µ¿ÀÛÀÌ ºí·ÏÅ·µÉ °ÍÀÌ´Ù. (º¸Åë send´Â µ¿ ÀÛÀÌ ³¡³¯ ¼ö ÀÖÀ» ¶§±îÁö ºí·ÏÅ·µÈ´Ù.)

ENOBUFS ÃæºÐÇÑ ³»ºÎ¹öÆÛ°ø°£ÀÌ ¾ø´Ù.

ENOTCONN ´ç½ÅÀº ÀÌ ¼ÒÄÏ¿¡ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù.

EPIPE ÀÌ ¼ÒÄÏÀº ¿¬°áµÇ¾î ÀÖÁö¸¸, ¿¬°áÀÌ ±úÁ®ÀÖ´Ù. ÀÌ °æ¿ì send´Â SIGPIPE½Ã±×³ÎÀ» ¸Õ Àú »ý¼ºÇÑ´Ù; ¸¸¾à ½Ã±×³ÎÀÌ ¹«½Ã µÇ°Å³ª ºí·ÏÅ·µÇ°Å³ª, Çڵ鷯°¡ ¹ÝȯµÈ´Ù¸é, send´Â EPIPE·Î ½ÇÆÐ¸¦ ¾Ë¸®°Ô µÈ´Ù.

11.8.5.2 µ¥ÀÌÅÍ ¼ö½ÅÇϱâ

recvÇÔ¼ö´Â 'sys/socket.h' Çì´õ ÆÄÀÏ¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ¸¸¾à flagsÀμö°¡ 0À̸é recv´ë½Å¿¡ read¸¦ ½áµµ µÈ´Ù.; 8.2Àý [I/OÃß»ó], 105ÂÊÀ» ÂüÁ¶Ç϶ó.

int recv (int socket, void *buffer, size_t size, int flags) ÇÔ¼ö

recvÇÔ¼ö´Â read¿Í À¯»çÇÏÁö¸¸, Ãß°¡ÀûÀ¸·Î flags¶ó´Â Ç÷¢À» °¡Áö°í ÀÖ´Ù. flags¿¡ °¡´ÉÇÑ °ªÀº 11.8.5.3Àý [¼ÒÄÏ µ¥ÀÌÅÍ ¿É¼Ç], 170ÂÊ¿¡ ¼­¼úµÇ¾î ÀÖ´Ù.

¸¸¾à ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå·Î ¼ÒÄÏ¿¡ ¼¼Æ®µÇ¾î ÀÖ°í, ÀÐÀ» µ¥ÀÌÅͰ¡ ¾øÀ¸¸é, recv´Â ±â´Ù¸®Áö ¾Ê°í Áï½Ã ½ÇÆÐ·Î ³¡³­´Ù. ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå¿¡ °üÇÑ Á¤º¸´Â 8.10Àý [ÆÄÀÏ »óÅ Ç÷¢], 116ÂÊÀ» º¸¶ó. ÀÌ ÇÔ¼ö´Â ¼ö½ÅµÈ ¹ÙÀÌÆ®¼ö¸¦ ¹ÝȯÇϰųª,½ÇÆÐ½Ã -1À» ¹ÝȯÇÑ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡ ¼±¾ðµÈ errno¿¡ ·¯ Á¶°ÇÀÌ´Ù.

EBADF socketÀμö°¡ À¯È¿ÇÑ ÆÄÀϼ­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK socket¼­¼úÀÚ°¡ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

EWOULDBLOCK ¼ÒÄÏ¿¡ ºí·ÏÅ·µÇÁö ¾Ê´Â ¸ðµå°¡ ¼¼Æ®µÇ¾î ÀÖ°í, Àб⠵¿ÀÛÀÌ ºí·ÏµÉ °ÍÀÌ´Ù. (º¸Åë recv´Â Àб⠰¡´ÉÇÑ ÀÔ·ÂÀÌ ÀÖÀ» ¶§±îÁö ºí·°Å·µÈ´Ù.)

EINTR µ¥ÀÌÅ͸¦ Àб⵵ Àü¿¡ ½Ã½º³Î¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®°¡ °É·È´Ù. 21.5Àý[ÀÎÅÍ·´Æ® Ãß»ó], 293ÂÊÀ» º¸¶ó.

ENOTCONN ´ç½ÅÀº ÀÌ ¼ÒÄÏ¿¡ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù.

11.8.5.3 ¼ÒÄÏ µ¥ÀÌÅÍ ¿É¼Ç

send¿Í recv¿¡ »ç¿ëµÇ´Â flagsÀμö´Â ºñÆ® ¸¶½ºÅ©ÀÌ´Ù. ´ç½ÅÀº ÀÌ Àμö¿¡ °ªÀ» ¾ò±â À§ÇØ ¾Æ·¡ ¸ÅÅ© ·Î·Î ºñÆ®º°-OR¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. 'sys/socket.h'Çì´õÆÄÀÏ¿¡ ¸ðµÎ Á¤ÀǵǾî ÀÖ´Ù.

int MSG__OOB ¸ÅÅ©·Î

out-of-bandµ¥ÀÌÅ͸¦ ¼Û½ÅÇϰųª ¼ö½ÅÇÑ´Ù. 11.8.8Àý [Out-of-band µ¥ÀÌÅÍ], 173ÂÊÀ» º¸¶ó.

int MSG__PEEK ¸ÅÅ©·Î

¼ö½ÅµÈ Å¥·ÎºÎÅÍ µ¥ÀÌÅ͸¦ º¸±â¸¸ ÇÏ°í ±×°ÍÀ» Áö¿ìÁö´Â ¸»¾Æ¶ó. À̰ÍÀº send°¡ ¾Æ´Ñ recv°°Àº ÀÔ ·ÂÇÔ¼ö¿¡¼­¸¸ Àǹ̰¡ ÀÖ´Ù. send.

int MSG__DONTROUTE ¸ÅÅ©·Î

ÀÌ ¸Þ½ÃÁö¿¡ ¶ó¿ìÆÃÁ¤º¸¸¦ Æ÷ÇÔÇÏÁö ¸¶¶ó. À̰ÍÀº Ãâ·Â ÇÔ¼ö¿¡¼­¸¸ Àǹ̸¦ °®´Â´Ù. ±×¸®°í ºÐ¼®ÀÌ ³ª ¶ó¿ìÆÃ ÇÁ·Î±×·¥¿¡¼­¸¸ Èï¹Ì·Ó°Ô »ç¿ëµÈ´Ù. ±×°Í¿¡ ´ëÇÏ¿©´Â ¿©±â¼­ ´õ ÀÌ»ó ¼³¸íÇÏÁö ¾Ê´Â´Ù.

11.8.6 Byte Stream ¼ÒÄÏ ¿¹Á¦

À̰ÍÀº ÀÎÅÍ³Ý À̸§°ø°£ÀÇ byte streamÀ» À§ÇÑ ¿¬°áÀ» ¸¸µå´Â ÇÁ·Î±×·¥ÀÇ ¿¹Á¦ÀÌ´Ù. ÇÑ ¹ø ¼­¹ö¿¡ ¿¬°áÇÏ°í Æ¯º°ÇÑ ÀÏÀ» ÇÏÁö ¾Ê´Â´Ù. ±×°ÍÀº ´ÜÁö ÅØ½ºÆ® ¹®ÀÚ¿­À» ¼­¹ö¿¡°Ô º¸³»°í Á¾·áÇÑ´Ù.

#include <stdio.h>

#include <errno.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#define PORT 5555

#define MESSAGE "Yow!!! Are we having fun yet?!?"

#define SERVERHOST "churchy.gnu.ai.mit.edu"

void

write_to_server (int filedes)

{

int nbytes;

nbytes =write (filedes, MESSAGE, strlen (MESSAGE) + 1);

if (nbytes < 0)

{

perror ("write");

exit (EXIT_FAILURE);

}

}

int

main (void)

{

extern void init_sockaddr (struct sockaddr_in *name,

const char *hostname,

unsigned short int port);

int sock;

struct sockaddr_in servername;

/* ¼ÒÄϸ¸µé±â */

sock = socket (PF_INET, SOCK_STREAM, 0);

if (sock < 0)

{

perror ("socket (client)");

exit (EXIT_FAILURE);

}

/* ¼­¹ö¿¡ ¿¬°á */

init_sockaddr (&servername, SERVERHOST, PORT);

if (0 > connect (sock,

(struct sockaddr *) &servername,

sizeof (servername)))

{

perror ("connect (client)");

exit (EXIT_FAILURE);

}

/* ¼­¹ö¿¡ µ¥ÀÌÅÍ º¸³»±â */

write_to_server (sock);

close (sock);

exit (EXIT_SUCCESS);

}

11.8.7 Byte Stream Connection ¼­¹ö ¿¹Á¦

¼­¹öÂÊÀº Á»´õ º¹ÀâÇÏ´Ù. ¿©·¯ Ŭ¶óÀÌ¾ðÆ®°¡ µ¿½Ã¿¡ ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö ÀÖµµ·Ï Çϱ⸦ ¿øÇϹǷÎ, °£ ´ÜÈ÷ ÇϳªÀÇ read³ª recv¸¦ È£ÃâÇÏ¿© ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®·ÎºÎÅÍ ÀÔ·ÂÀ» ±â´Ù·Á¼­´Â ¾È µÈ´Ù. ´ë½Å¿¡, ¸ðµç ¿­¸° ¼ÒÄÏÀ¸·ÎºÎÅÍ ÀÔ·ÂÀ» ±â´Ù¸®µµ·Ï(8.6Àý [I/O ±â´Ù¸®±â], 111ÂÊ), select¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¿Ã ¹Ù¸¥ °ÍÀÌ´Ù. À̰ÍÀº ¶ÇÇÑ Ãß°¡ÀûÀÎ ¿¬°á ¿ä±¸¸¦ ´Ù·çµµ·Ï Çã¶ôÇÑ´Ù.

ÀÌ Æ¯º°ÇÑ ¼­¹ö´Â Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¸Þ½ÃÁö¸¦ ÇÑ ¹ø ¹Þ´Â ´Ù´Â °Í ¿Ü¿¡ Ưº°È÷ Èï¹Ì·Î¿î ÀÏÀ» ÇÏ Áö ¾Ê´Â´Ù. ±×°ÍÀº (Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áÀ» Á¾·áÇÏ´Â °á°ú·Î½á) ÆÄÀÏÀÇ ³¡(end-of-file)Á¶°ÇÀ» °ËÃâÇÏ¿´ À» ¶§,±× Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ ¼ÒÄÏÀ» ´Ý´Â´Ù.

ÀÌ ÇÁ·Î±Û·¥Àº ¼ÒÄÏÁÖ¼Ò¸¦ ¼¼Æ®Çϱâ À§ÇØ make_socket°ú init_sockaddr¸¦ »ç¿ëÇÏ¿´´Ù. ; 11.5.7 [Inet ¿¹Á¦],163ÂÊÀ» º¸¶ó

#include <stdio.h>

#include <errno.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#define PORT 5555

#define MAXMSG 512

int

read_from_client (int filedes)

{

char buffer[MAXMSG];

int nbytes;

nbytes = read (filedes, buffer, MAXMSG);

if (nbytes < 0)

{

/* Àб⠿¡·¯ */

perror ("read");

exit (EXIT_FAILURE);

}

else if (nbytes == 0)

/* ÆÄÀÏÀÇ ³¡ */

return -1;

else

{

/* µ¥ÀÌÅÍ Àбâ */

fprintf (stderr, "Server: got message: `%s'\n", buffer);

return 0;

}

}

int

main (void)

{

extern int make_socket (unsigned short int port);

int sock;

int status;

fd_set active_fd_set, read_fd_set;

int i;

struct sockaddr_in clientname;

size_t size;

/* Create the socket and set it up to accept connections. */

sock = make_socket (PORT);

if (listen (sock, 1) < 0)

{

perror ("listen");

exit (EXIT_FAILURE);

}

/* Initialize the set of active sockets. */

FD_ZERO (&active_fd_set);

FD_SET (sock, &active_fd_set);

while (1)

{

/* Block until input arrives on one or more active sockets. */

read_fd_set = active_fd_set;

if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0)

{

perror ("select");

exit (EXIT_FAILURE);

}

/* Service all the sockets with input pending. */

for (i = 0; i < FD_SETSIZE; ++i)

if (FD_ISSET (i, &read_fd_set))

{

if (i == sock)

{

/* Connection request on original socket. */

size = sizeof (clientname);

if (accept (sock,

(struct sockaddr *) &clientname, &size) < 0)

{

perror ("accept");

exit (EXIT_FAILURE);

}

fprintf (stderr,

"Server: connect from host %s, port %hd.\n",

inet_ntoa (clientname.sin_addr),

ntohs (clientname.sin_port));

FD_SET (status, &active_fd_set);

}

else

{

/* Data arriving on an already-connected socket. */

if (read_from_client (i) < 0)

{

close (i);

FD_CLR (i, &active_fd_set);

}

}

}

}

}

11.8.8 Out-of-Band µ¥ÀÌŸ

¿¬°áÀ» °¡Áø ½ºÆ®¸²Àº ÀÏ¹Ý µ¥ÀÌÅͺ¸´Ù ³ôÀº ¿ì¼±¼øÀ§·Î ¹è´ÞµÇ´Â µ¥ÀÌÅÍÀÎ out-of-Bandµ¥ÀÌÅ͸¦ °¡´ÉÇÏ°Ô ÇÑ´Ù. ÀüÇüÀûÀ¸·Î out-of-bandµ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ÀÌÀ¯´Â ¿¹¿ÜÀûÀÎ »óȲÀÇ Å뺸 ¶§¹®ÀÌ´Ù. out-of-bandµ¥ÀÌÅ͸¦ º¸³»´Â ¹æ¹ýÀº MSG_OOBÇ÷¢À» ¼¼Æ®ÇÑ (11.8.5.1Àý[µ¥ÀÌÅÍ Àü¼Û],169ÂÊ Âü°í) send¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

¼ö½Å ÇÁ·Î¼¼½º°¡ ¼ø¼­´ë·Î ±×°ÍÀ» ¹ÞÁö ¾ÊÀ¸¹Ç·Î, out-of-band µ¥ÀÌÅÍ´Â ´õ ³ôÀº ¿ì¼± ¼øÀ§·Î ¹Þ¾Æ Áø´Ù. Áï, ´ÙÀ½ °¡´ÉÇÑ out-of-band µ¥ÀÌÅ͸¦ ÀÐÀ¸·Á¸é, MSG_OOBÇ÷¢À» ¼¼Æ®ÇÏ¿© recv¸¦ »ç¿ëÇÑ ´Ù. (11.8.5.2Àý [µ¥ÀÌÅÍ ¼ö½Å], 169ÂÊÀ» º¸¶ó). º¸Åë Àбâ¸í·ÉÀº out-of-bandµ¥ÀÌÅ͸¦ ÀÐÁö ¾Ê´Â´Ù. ±×°ÍµéÀº ´ÜÁö ÀÏ¹Ý µ¥ÀÌÅ͸¸ Àд´Ù.

¼ÒÄÏÀÌ out-of-bandµ¥ÀÌÅͰ¡ ÀÖÀ½À» ¾Ë°Ô µÇ¸é, ¼ÒÀ¯ÇÁ·Î¼¼½º³ª ¼ÒÄÏÀÇ ÇÁ·Î¼¼½º ±×·ì¿¡ SIGURG½Ã ±×³ÎÀ» º¸³½´Ù. F_SETOWN¸í·ÉÀ¸·Î fcntlÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼ÒÀ¯ÀÚ¸¦ ¸í½ÃÇÒ ¼ö ÀÖ´Ù.; 8.12Àý [ÀÎÅÍ ·´Æ® ÀÔ·Â], 120ÂÊÀ» º¸¶ó. ¶ÇÇÑ ÀÌ ½Ã±×³ÎÀÇ Çڵ鷯¸¦ ¼³Á¤ÇÒ ¼ö Àִµ¥, out-of-bandµ¥ÀÌÅ͸¦ Àд µîÀÇ ÀûÀýÇÑ µ¿ÀÛÀ» ÃëÇϱâ À§ÇØ, 21Àå[½Ã±×³Î Çڵ鸵], 271ÂÊÀ» º¸¶ó.

´Ù¸¥ °ÍÀ¸·Î, selectÇÔ¼ö¸¦ »ç¿ëÇÏ¿©, ¹Ì°áÀÇ out-of-data¸¦ °Ë»çÇϰųª out-of-bandµ¥ÀÌÅͰ¡ ÀÖÀ» ¶§±îÁö ±â´Ù¸±¼ö ÀÖ´Ù.; ±×°ÍÀº ¼ÒÄÏ ¿¹¿Ü Á¶°ÇÀ» ±â´Ù¸± ¼ö ÀÖ´Ù. select¿¡ °üÇÑ ¸¹Àº Á¤º¸´Â 8.6Àý [I/O¸¦ ±â´Ù¸®±â], 111ÂÊÀ» º¸¶ó.

(SIGURG¸¦ »ç¿ëÇϰųª select¸¦ »ç¿ëÇÒ °ÍÀÌ´øÁö) out-of-band µ¥ÀÌÅÍÀÇ Åë°í´Â out-of-bandµ¥ÀÌ ÅͰ¡ ÁøÇàÁß¿¡ ÀÖÀ½À» °¡¸®Å²´Ù.; Áï µ¥ÀÌÅÍ´Â ¾ÆÁ÷ ½ÇÁ¦·Î µµÂøÇÏÁö ¾Ê¾Ò´Ù. ¸¸¾à ±×°ÍÀÌ ¿ÏÀüÈ÷ µµ ÂøÇϱâ Àü¿¡ out-of-data¸¦ ÀÐÀ¸·Á°í Çϸé, recv ´Â EWOULDBLOCK¿¡·¯·Î ½ÇÆÐÇÏ°Ô µÈ´Ù.

out-of-bandµ¥ÀÌÅÍ Àü¼ÛÀº ÀÚµ¿À¸·Î ÀÏ¹Ý µ¥ÀÌÅÍÀÇ È帧 ¾È¿¡ "¸¶Å©"¸¦ µÐ´Ù. ±×°ÍÀº ¾îµð¿¡ out-of-bandµ¥ÀÌÅͰ¡ ¾îµð¿¡ ÀÖÀ»Áö¸¦ º¸¿©ÁØ´Ù. out-of-band µ¥ÀÌÅͰ¡ ¸ÕÀú º¸³»Áø ¸ðµç °ÍµéÀ» Ãë ¼Ò½ÃŲ´Ù´Â Àǹ̸¦ °¡Áú ¶§ À¯¿ëÇÏ´Ù. ¿©±â¿¡ ¼ö½Å ÇÁ·Î¼¼½º¿¡¼­ ¸¶Å©Àü¿¡ º¸³»Áø º¸Åë µ¥ÀÌÅÍÀÎÁö ¾Æ´ÑÁö ¾î¶»°Ô Å×½ºÆ®ÇÏ´ÂÁö°¡ ³ª¿ÍÀÖ´Ù.

success = ioctl (socket, SIOCATMARK, &result);

ÀÌ ÇÔ¼ö´Â out-of-band ¸¶Å© ¾ÕÀÇ ÀÏ¹Ý µ¥ÀÌÅ͸¦ ¹«½ÃÇÏ´Â °ÍÀÌ´Ù.

int

discard_until_mark (int socket)

{

while (1)

{

/* This is not an arbitrary limit; any size will do. */

char buffer[1024];

int result, success;

/* If we have reached the mark, return. */

success = ioctl (socket, SIOCATMARK, &result);

if (success < 0)

perror ("ioctl");

if (result)

return;

/* Otherwise, read a bunch of ordinary data and discard it This is guaranteed not to read past the mark if it starts before the mark. */

success = read (socket, buffer, sizeof buffer);

if (success < 0)

perror ("read");

}

}

¸¸¾à ¸¶Å©¾ÕÀÇ ÀÏ¹Ý µ¥ÀÌÅ͸¦ ¹«½ÃÇÏÁö ¾ÊÀ¸·Á¸é, ±×°ÍÀ» ¾î¶»°Ôµç Àбâ À§ÇØ, out-of-bandµ¥ÀÌÅÍ ¸¦ À§ÇÑ ³»ºÎ½Ã½ºÅÛ¹öÆÛ °ø°£À» ¸¸µé¾î¾ß ÇÑ´Ù. ¸¸¾à out-of-bandµ¥ÀÌÅ͸¦ ÀÐÀ¸·Á Çϴµ¥ EWOULDBLOCK¿¡·¯¸¦ ¹Þ´Â´Ù¸é, ¾à°£ÀÇ ÀϹݵ¥ÀÌÅ͸¦ (±×°ÍÀ» ¾ò¾úÀ» ¶§ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀúÀå À» Çϸç) Àб⸦ ½ÃµµÇ϶ó. ±×¸®°í ±×°ÍÀÌ °ø°£À» ¸¸µå´ÂÁö¸¦ º¸¾Æ¶ó. ¿©±â ¿¹Á¦°¡ ÀÖ´Ù.

struct buffer

{

char *buffer;

int size;

struct buffer *next;

};

/* Read the out-of-band data from SOCKET and return it as a `struct buffer', which records the address of the data and its size.

It may be necessary to read some ordinary data in order to make room for the out-of-band data. If so, the ordinary data is saved as a chain of buffers found in the `next' field of the value. */

struct buffer *

read_oob (int socket)

{

struct buffer *tail = 0;

struct buffer *list = 0;

while (1)

{

/* This is an arbitrary limit. Does anyone know how to do this without a limit? */

char *buffer = (char *) xmalloc (1024);

struct buffer *link;

intsuccess;

int result;

/* Try again to read the out-of-band data. */

success = recv (socket,buffer,sizeof buffer,MSG_OOB);

if (success >= 0)

{

/* We got it, so return it. */

struct buffer *link

=(struct buffer*) xmalloc(sizeof(struct buffer));

link->buffer = buffer;

link->size = success;

link->next = list;

return link;

}

/* If we fail, see if we are at the mark. */

success = ioctl (socket, SIOCATMARK, &result);

if (success < 0)

perror ("ioctl");

if (result)

{

/* At the mark; skipping past more ordinary data cannot help. So just wait a while. */

sleep (1);

continue;

}

/* Otherwise, read a bunch of ordinary data and save it. This is guaranteed not to read past the mark if it starts before the mark. */

success = read (socket, buffer, sizeof buffer);

if (success < 0)

perror ("read");

/* Save this data in the buffer list. */

{

struct buffer *link

= (struct buffer *) xmalloc(sizeof (struct buffer));

link->buffer = buffer;

link->size = success;

/* Add the new link to the end of the list. */

if (tail)

tail->next = link;

else

list = link;

tail = link;

}

}

}

11.9 µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ ¸í·É

À̹ø Àý¿¡¼­´Â ¾î¶»°Ô ¿¬°á¾ø´Â Åë½Å½ºÅ¸ÀÏ(SOCK_DGRAM°ú SOCK_RDM½ºÅ¸ÀÏ)À» »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇØ ¼­¼úÇÑ´Ù. ÀÌ·¯ÇÑ ½ºÅ¸ÀÏÀ» »ç¿ëÇÏ¿© ÆÐŶ¾È¿¡ µ¥ÀÌÅ͸¦ ¹­¾î ³Ö°í, °¢ ÆÐŶÀº µ¶¸³ÀûÀÎ Åë½ÅÀ» ÇÏ°Ô µÈ´Ù. ±×¸®°í °¢ ÆÐŶ¸¶´Ù ¸ñÀûÁö¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.

µ¥ÀÌÅͱ׷¥ ÆÐŶÀº ÆíÁö¿Í °°´Ù. ´ç½ÅÀº °³º°ÀûÀ¸·Î Çϳª¾¿ ¸ñÀûÁö¸¦ ¸í½ÃÇÏ¿© º¸³½´Ù. ±×°ÍµéÀº ¼ø ¼­°¡ ¹Ù²î¾î µµÂøÇÒ ¼öµµ ÀÖ´Ù.

listen°ú acceptÇÔ¼ö´Â ºñ¿¬°á Åë½Å ½ºÅ¸ÀÏÀ» »ç¿ëÇÏ´Â ¼ÒÄÏ¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.

11.9.1 µ¥ÀÌÅͱ׷¥ Àü¼Û

µ¥ÀÌÅͱ׷¥¼ÒÄÏÀ¸·Î µ¥ÀÌÅ͸¦ º¸³»´Â º¸Åë ¹æ¹ýÀº 'sys/socket.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Â sendtoÇÔ¼ö¸¦ »ç ¿ëÇÏ´Â °ÍÀÌ´Ù. µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ¿¡ connect¸¦ È£ÃâÇÒ ¼ö ÀÖÁö¸¸, ³ªÁß¿¡ µ¥ÀÌÅÍÀü¼ÛÀ» À§ÇØ ±âº»°æ·Î ¸¦ ÇÑ ¹ø ¸í½ÃÇÑ´Ù. ¼ÒÄÏÀÌ ±âº»°æ·Î¸¦ °¡Áö¸é, send¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.(11.8.5.1Àý [µ¥ÀÌÅÍ Àü¼Û],169 ÂÊÀ» º¸¶ó) ¶ÇÇÑ ÆÐŶÀ» Àü¼ÛÇϱâ À§ÇØ write¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.(8.2Àý [I/O Ãß»ó], 105ÂÊÀ» º¸¶ó). addrÀμö¿¡ AF_UNSPECÀÇ ÁÖ¼ÒÆ÷¸ËÀ» »ç¿ëÇÏ¿© connect¸¦ È£ÃâÇÔÀ¸·Î½á ±âº»°æ·Î¸¦ Ãë¼ÒÇÒ ¼ö ÀÖ ´Ù. connectÇÔ¼ö¿¡ °üÇÑ ´õ ¸¹Àº Á¤º¸´Â 11.8.1Àý [¿¬°áÇϱâ] 166ÂÊÀ» º¸¶ó.

int sendto (int socket, void *buffer. size_t size, int flags, struct sockaddr *addr, size_t length) ÇÔ¼ö

sendtoÇÔ¼ö´Â ¸ñÀûÁö°¡ addr°ú lengthÀμö·Î ¸í½ÃµÇ¾î ÀÖ´Â socketÀ» ÅëÇÏ¿© ¹öÆÛ¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ Àü¼ÛÇÑ´Ù. sizeÀμö´Â Àü¼ÛÇÒ ¹ÙÀÌÆ® ¼ö¸¦ ¸»ÇÑ´Ù.

flags´Â send¿¡¼­°ú °°Àº ¹æ¹ýÀ¸·Î ÇØ¼®µÈ´Ù; 11.8.5.3Àý [¼ÒÄÏ µ¥ÀÌÅÍ ¿É¼Ç], 170ÂÊÀ» º¸¶ó.

¹Ýȯġ¿Í ¿¡·¯»óŵµ ¿ª½Ã send¿Í ºñ½ÁÇÏ´Ù. ±×·¯³ª ½Ã½ºÅÛÀÌ ¿¡·¯¸¦ °ËÃâÇÏ°Ô ÇÒ ¼ö´Â ¾ø´Ù. ´ëºÎ ºÐÀÇ ¿¡·¯´Â ÆÐŶÀÌ ¾ø¾îÁö°Å³ª ¼ö½ÅÇÒ ÁÖ¼Ò°¡ ¸í½ÃµÇ¾î ÀÖÁö ¾ÊÀº °ÍÀÌ´Ù. ±×·¡¼­ ´ç½ÅÀÇ OS´Â º¸ Åë ¿¡·¯°¡ ³­ °ÍÀ» ¾ËÁö ¸øÇÒ °ÍÀÌ´Ù. ¿¹ÀüÀÇ È£Ãâ¿¡ °ü·ÃµÈ ¹®Á¦ ¶§¹®¿¡ sendto´Â ¿¡·¯°¡ ³µ´Ù°í ÇÒ ¼öµµ ÀÖ´Ù.

11.9.2 µ¥ÀÌÅͱ׷¥ ¼ö½Å

recvfromÇÔ¼ö´Â µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀ¸·ÎºÎÅÍ ÆÐŶÀ» ÀÐ°í ¶ÇÇÑ ¾îµð¼­ºÎÅÍ ¿Â °ÍÀÎÁö ¾Ë·ÁÁØ´Ù. ÀÌ ÇÔ¼ö´Â 'sys/socket.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

int recvfrom (int socket, void *buffer, size_t size, int flags, struct sockaddr *addr, size_t *length_ptr) ÇÔ¼ö

recvfromÇÔ¼ö´Â socket¼ÒÄÏÀ¸·ÎºÎÅÍ ÆÐŶÇϳª¸¦ Àоî buffer¶ó´Â ¹öÆÛ¿¡ ³Ö´Â´Ù. sizeÀμö´Â ÇÑ ¹ø ÀÐÀ» ¶§ ÃÖ´ëÀÇ ¹ÙÀÌÆ® ¼öÀÌ´Ù. ¸¸¾à ÆÐŶÀÌ size¹ÙÀÌÆ®º¸´Ù ´õ Å©¸é, ÆÐŶÀÇ ¾ÕºÎºÐ¸¸ ¾òÀ»¼ö ÀÖ°í specify flags¸¦ ¿øÇÏÁö ¾ÊÀ¸¸é »ç¿ëµÈ´Ù.(8.2Àý[I/O Primitives]À» º¸¶ó, 105ÂÊ).

¸¸¾à (¾îµð¼­ºÎÅÍ ¿Ã °ÍÀÎÁö ¾Æ´Â °æ¿ì, ´©°¡ º¸³Â´øÁö ¶È°°ÀÌ Ãë±ÞÇϱ⠶§¹®¿¡) ´©°¡ ÆÐŶÀ» º¸³Â ´ÂÁö ¾Ë Çʿ䰡 ¾ø´Ù¸é recvfrom´ë½Å¿¡ ÆòźÇÑ recv¸¦ ¾µ ¼ö ÀÖ´Ù. (11.8.5.2Àý [µ¥ÀÌÅÍ ¼ö½Å], 169ÂÊ À» º¸¶ó)

11.9.3 µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ ¿¹Á¦

¿©±â¿¡ ÆÄÀÏÀ̸§°ø°£ÀÇ µ¥ÀÌÅͱ׷¥ ½ºÆ®¸²À» ÅëÇØ ¸Þ½ÃÁö¸¦ º¸³»´Â ¿¹Á¦ÇÁ·Î±×·¥ÀÇ ¼¼Æ®°¡ ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹öÇÁ·Î±×·¥µé ¸ðµÎ°¡ ¼ÒÄÏÀ» ¸¸µé°í À̸§Áþ±â À§ÇÏ¿©, 11.4Àý [ÆÄÀÏ À̸§°ø°£]¿¡ ¼³ ¸íµÇ¾î ÀÖ´Â make_named_socket ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

¸ÕÀú ¿©±â ¼­¹öÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. ±×°ÍÀº ¸Þ½ÃÁö°¡ µµÂøÇÒ ¶§±îÁö °è¼Ó ±â´Ù¸®°í ¸Þ½ÃÁö°¡ ¿À¸é ´Ù ½Ã ¼Û½ÅÀÚ¿¡°Ô µÇµ¹·ÁÁÖ´Â °ÍÀ» ¹Ýº¹ÇÑ´Ù. ºÐ¸íÈ÷ Ưº°È÷ À¯¿ëÇÑ ÇÁ·Î±×·¥ÀÌ ¾Æ´ÏÁö¸¸, ÀϹÝÀûÀÎ ¾Æ À̵ð¾î¸¦ º¸¿©ÁØ´Ù.

#include <stdio.h>

#include <errno.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <sys/un.h>

#define SERVER "/tmp/serversocket"

#define MAXMSG 512

int

main (void)

{

int sock;

char message[MAXMSG];

struct sockaddr_un name;

size_t size;

int nbytes;

/* Make the socket, then loop endlessly. */

sock = make_named_socket (SERVER);

while (1)

{

/* Wait for a datagram. */

size = sizeof (name);

nbytes = recvfrom (sock, message, MAXMSG, 0,

(struct sockaddr *) & name, &size);

if (nbytes < 0)

{

perror ("recfrom (server)");

exit (EXIT_FAILURE);

}

/* Give a diagnostic message. */

fprintf (stderr, "Server: got message: %s\n", message);

/* Bounce the message back to the sender. */

nbytes = sendto (sock, message, nbytes, 0,

(struct sockaddr *) & name, size);

if (nbytes < 0)

{

perror ("sendto (server)");

exit (EXIT_FAILURE);

}

}

}

11.9.4 µ¥ÀÌÅͱ׷¥ Àб⠿¹Á¦

¿©±â À§¿¡ ÀÖ´Â ¼­¹öÇÁ·Î±×·¥¿¡ ¸Â´Â Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù.

±×°ÍÀº ¼­¹ö¿¡°Ô µ¥ÀÌÅͱ׷¥À» ¼Û½ÅÇÏ°í³ª¼­ ÀÀ´äÀ» ±â´Ù¸°´Ù. Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ ¼ÒÄÏ¿¡´Â (¼­¹ö¿Í °°ÀÌ) ÁÖ¾îÁø À̸§À» °¡Áö°í ÀÖÀ½À» ÁÖ½ÃÇ϶ó. ±×°ÍÀº ¼­¹ö°¡ ¸Þ½ÃÁö¸¦ ¹Ù·Î Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µÇµ¹ ¸®°Ô ÇÑ´Ù. ¼ÒÄÏÀÌ ¿¬°èµÈ ¿¬°á»óŸ¦ °¡ÁöÁö ¾Ê±â ¶§¹®¿¡, ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ À̸§À» ÂüÁ¶ÇÏ¿© ±× ·¸°Ô ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.

#include <stdio.h>

#include <errno.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <sys/un.h>

#define SERVER "/tmp/serversocket"

#define CLIENT "/tmp/mysocket"

#define MAXMSG 512

#define MESSAGE "Yow!!! Are we having fun yet?!?"

int

main (void)

{

externint make_named_socket (const char *name);

int sock;

char message[MAXMSG];

struct sockaddr_un name;

size_t size;

int nbytes;

/* Make the socket. */

sock = make_named_socket (CLIENT);

/* Initialize the server socket address. */

name.sun_family = AF_UNIX;

strcpy (name.sun_path, SERVER);

size = strlen (name.sun_path) + sizeof (name.sun_family);

/* Send the datagram. */

nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,

(struct sockaddr *) & name, size);

if (nbytes < 0)

{

perror ("sendto (client)");

exit (EXIT_FAILURE);

}

/* Wait for a reply. */

nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);

if (nbytes < 0)

{

perror ("recfrom (client)");

exit (EXIT_FAILURE);

}

/* Print a diagnostic message. */

fprintf (stderr, "Client: got message: %s\n", message);

/* Clean up. */

remove (CLIENT);

close (sock);

}

µ¥ÀÌÅͱ׷¥¼ÒÄÏ Åë½ÅÀº ºñ½Å·Ú¼ºÀÓÀ» ¸í½ÉÇ϶ó. ÀÌ ¿¹Á¦¿¡¼­, ¸Þ½ÃÁö°¡ ¼­¹ö¿¡ µµ´ÞÇÏÁö ¸øÇϰųª ¼­¹ö°¡ ÀÀ´äÀ» ÇÏÁö ¾ÊÀ» Áö¶óµµ, Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº ¸·¿¬È÷ ±â´Ù¸°´Ù. ¸¸¾à ¿øÇÑ´Ù¸é, ±×°ÍÀ» Á¾·á½ÃŰ°í ¸®¼Â½ÃŰ´Â ÇÁ·Î±×·¥À» À¯Àú°¡ ¼öÇàÇÏ¿©¾ß ÇÑ´Ù. ÀÚµ¿ÀûÀÎ ÇØ°á¹ýÀº select(8.6Àý [I/O±â ´Ù¸®±â],111ÂÊÀ» º¸¶ó)À» »ç¿ëÇÏ¿© ÀÀ´äÀÇ ½Ã°£Á¦ÇÑÀ» ¼³Á¤ÇÏ¿©, ½Ã°£Á¦ÇÑÀÌ ÃʰúµÇ¸é ¸Þ½ÃÁö¸¦ ÀçÀü ¼ÛÇϰųª ¼ÒÄÏÀ» ³¡³»°í Á¾·áÇÏ´Â °ÍÀÌ´Ù.

11.10 inetd µ¥¸ó

À§¿¡¼­ µè±â¸¦ ÇÏ´Â ¼­¹öÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¹ýÀ» ¼³¸íÇß´Ù. ¾î¶² ¼­¹ö´Â ±×°Í¿¡ Á¢¼ÓÇϱâ À§ÇØ ¹Ì¸® ¼öÇàµÇ°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÎÅÍ³ÝÆ÷Æ®¸¦ À§ÇÑ ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº inetd µ¥¸óÇÁ·Î±×·¥ À» ÀÌ¿ëÇÏ¿© µè±â¸¦ Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. inetd´Â ¸í½ÃµÈ Æ÷Æ®ÀÇ ¼¼Æ®¿¡¼­ÀÇ ¸Þ½ÃÁö¸¦ (select¸¦ »ç¿ë ÇÏ¿©) ±â´Ù¸®¸ç ¼öÇàµÇ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ±×°ÍÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§, (¸¸¾à ¼ÒÄϽºÅ¸ÀÏÀÌ ¿¬°áÀÌ ÇÊ ¿äÇϸé) ¿¬°áÀ» ¼ö¶ôÇÏ°í³ª¼­, ÇØ´ç ¼­¹öÇÁ·Î±×·¥À» ¼öÇàÇϵµ·Ï ÀÚ½ÄÇÁ·Î¼¼½º¸¦ ¸¸µé¾î ³½´Ù. '/etc/inetd.conf'ÆÄÀϳ»¿¡ Æ÷Æ®µé¿Í ÇÁ·Î±×·¥µéÀ» ¸í½ÃÇÑ´Ù.

11.10.1 inetd ¼­¹öµé

inetd¿¡ ÀÇÇØ ¼öÇàµÇ´Â ¼­¹öÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀº ¸Å¿ì °£´ÜÇÏ´Ù. ´©±º°¡ ÇØ´ç Æ÷Æ®·Î ¿¬°áÀ» ¿¬°áÇÏ·Á´Â ¶§¸¶´Ù, »õ·Î¿î ¼­¹ö ÇÁ·Î¼¼½º°¡ ½ÃÀ۵ȴÙ. ¿¬°áÀº ´ÜÁö ÀÌ ¼ø°£¿¡¸¸ Á¸ÀçÇÑ´Ù. ¼ÒÄÏÀº ¼­¹öÇÁ·Î¼¼½º¿¡¼­ Ç¥ÁØ ÀÔ·Â ¼­¼úÀÚ¿Í Ç¥ÁØ Ãâ·Â ¼­¼úÀÚ (¼­¼úÀÚ 0°ú 1)ó·³ µÈ´Ù. °¡²ûÀº ÇÁ·Î±×·¥ ÀÌ ÀϹÝÀûÀÎ I/O±â´ÉÀ» ÇÊ¿ä·Î ÇÒ ¶§µµ ÀÖ´Ù.; ½ÇÁ¦·Î, ¼ÒÄÏ¿¡ ´ëÇØ ¾Æ¹«°Íµµ ¸ð¸£´Â ¹ü¿ë ÇÊÅÍ ÇÁ·Î ±×·¥µµ inetd¿¡ ÀÇÇØ ¹ÙÀÌÆ® ½ºÆ®¸² ¼­¹öó·³ µ¿ÀÛÇÒ ¼ö ÀÖ´Ù.

ºñ¿¬°á¼º Åë½Å ½ºÅ¸ÀÏÀÇ ¼­¹ö¿¡µµ inetd¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¬°áÀÌ ÇÊ¿ä¾øÀ¸¹Ç·Î, ÀÌ·¯ÇÑ ¼­¹öµéÀ» À§ÇØ inetd´Â ¿¬°áÀ» ¼ö¶ôÇÏ·Á´Â ½Ãµµ¸¦ ÇÏÁö ¾Ê´Â´Ù. ±×°ÍÀº ¹Ù·Î ¼­¼úÀÚ 0À¸·ÎºÎÅÍ ¼ö½ÅµÈ µ¥ÀÌÅÍ ±×·¥ÆÐŶÀ» ÀÐÀ» ¼ö ÀÖ´Â ¼­¹öÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù. ¼­¹öÇÁ·Î±×·¥Àº ÇÑ ¿ä±¸¸¦ ´Ù·ê ¼ö ÀÖ°í Á¾·áÇÒ ¼ö ÀÖ´Ù. ¶Ç´Â ´õ ÀÌ»óÀÇ µµÂøÀÌ ¾øÀ» ¶§±îÁö ¿ä±¸¸¦ Àд °ÍÀ» °è¼ÓÇÏ°í³ª¼­ Á¾·áÇÒ ¼öµµ ÀÖ´Ù. inetd¸¦ ¼³Á¤ÇÒ ¶§, À§ÀÇ µÎ°¡Áö ±â¼ú Áß ¾î¶² °ÍÀ» »ç¿ëÇÒ °ÍÀÎÁö ¸í½ÃÇØ¾ß ÇÑ´Ù.

11.10.2 inetd ¼³Á¤

'/etc/inetd.conf'ÆÄÀÏÀº inetd¿¡°Ô µéÀ» Æ÷Æ®¹øÈ£¿Í ¼öÇàµÉ ¼­¹öÇÁ·Î±×·¥ÀÌ ¹«¾ùÀÎÁö ¸»ÇØÁØ´Ù. º¸Åë ÀÌ ÆÄÀÏÀÇ °¢ ¿ä¼Ò´Â ÇÑ ÁÙ¾¿ÀÌ´Ù. ±×·¯³ª, ±×°ÍÀ» È­ÀÌÆ®½ºÆäÀ̽º·Î ½ÃÀÛÇÏ´Â ¿ä¼ÒÀÇ Ã¹ ¹øÂ° ÁÙÀ» Á¦¿ÜÇÑ ¸ðµç ÁÙ·Î ³ª´­ ¼ö ÀÖ´Ù. '#'·Î ½ÃÀÛÇÏ´Â ÁÙÀº ÁÖ¼®¹®ÀÌ´Ù.

¿©±â '/etc/inetd.conf'¾ÈÀÇ µÎ ±âº»ÀûÀÎ ¿ä¼Ò°¡ ÀÖ´Ù.

ftp stream tcp nowait root /libexec/ftpd ftpd

talk dgram udp wait root /libexec/talkd talkd

ÇÑ ¿ä¼Ò´Â ´ÙÀ½ Çü½ÄÀ» °¡Áø´Ù.

¼­ºñ½º ½ºÅ¸ÀÏ ÇÁ·ÎÅäÄÝ ´ë±â »ç¿ëÀÚ¸í ÇÁ·Î±×·¥ Àμö

¼­ºñ½º ºÎºÐÀº ÀÌ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¼­ºñ½º¸¦ Á¦°øÇÏ´Â Áö¸¦ ¸»ÇÑ´Ù. ±×°ÍÀº '/etc/services'¾È¿¡ ¼­ ºñ½ºÀÇ À̸§ÀÌ Á¤ÀǵǾî ÀÖÀ» °ÍÀÌ´Ù. inetd´Â ÀÌ ¿ä¼Ò¸¦ À§ÇØ µéÀ» ¾î¶² Æ÷Æ®¸¦ »ç¿ëÇÒ °ÍÀΰ¡ °áÁ¤ Çϴµ¥ ¼­ºñ½º¸¦ »ç¿ëÇÑ´Ù.

½ºÅ¸Àϰú ÇÁ·ÎÅäÄÝ ºÎºÐÀº Åë½Å½ºÅ¸Àϰú ¼ÒÄÏÀ» µè´Âµ¥ »ç¿ëµÇ´Â ÇÁ·ÎÅäÄÝÀ» ¸í½ÃÇÑ´Ù. ½ºÅ¸ÀÏÀº 'SOCK_'ÀÌ ºüÁö°í, ¼Ò¹®ÀÚ·Î º¯È¯µÈ Åë½Å½ºÅ¸ÀÏÀÇ À̸§ÀÌ´Ù. ¿¹¸¦ µé¸é stream ¶Ç´Â dgramÀÌ´Ù. ÇÁ ·ÎÅäÄÝÀº '/etc/protocols'¿¡ ³ª¿­µÈ ÇÁ·ÎÅäÄÝ Áß ÇϳªÀÌ´Ù. ÀüÇüÀûÀÎ ÇÁ·ÎÅäÄÝÀ̸§Àº ¹ÙÀÌÆ® ½ºÆ®¸² Åë½ÅÀ» À§ÇÑ 'tcp'¿Í ºñ½Å·Ú¼º µ¥ÀÌÅͱ׷¥À» À§ÇÑ 'udp'°¡ ÀÖ´Ù.

´ë±â ºÎºÐÀº 'wait' ¶Ç´Â 'nowait' Áß ÇϳªÀÌ´Ù. ¸¸¾à Åë½Å½ºÅ¸ÀÏÀÌ ºñ¿¬°á¼ºÀ̰í, ¼­¹ö°¡ ½ÃÀ۽ÿ¡ ¸¸ ¸¹Àº ´ÙÁß ¿ä±¸¸¦ ´Ù·é´Ù¸é 'wait'À» »ç¿ëÇ϶ó. ¸¸¾à inetd°¡ °¢ ¸Þ½ÃÁö³ª ¿ä±¸°¡ µé¾î ¿Ã ¶§¸¶´Ù »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÃÀÛÇÒ °æ¿ì 'nowait'¸¦ »ç¿ëÇ϶ó. ¸¸¾à ½ºÅ¸ÀÏÀÌ ¿¬°á¼ºÀÌ¸é ´ë±â ºÎºÐÀº 'nowait'¸¦ ½á¶ó.

»ç¿ëÀÚ¸íÀº ¼­¹ö¸¦ ¼öÇàÇÏ´Â »ç¿ëÀÚÀÇ À̸§ÀÌ´Ù. inetd´Â root·Î¼­ ¼öÇàµÈ´Ù. ±×·¡¼­ ¸¶À½´ë·Î ±× ÀÚ½ÄÀÇ »ç¿ëÀÚID¸¦ ¼¼Æ®ÇÒ ¼ö ÀÖ´Ù. °¡´ÉÇÏ¸é »ç¿ëÀÚ¸í¿¡ 'root'¸¦ ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù.; ±×·¯³ª telnet °ú ftp°°Àº ¾î¶² ¼­¹ö´Â »ç¿ëÀÚ À̸§°ú ¾ÏÈ£¸¦ Àд´Ù. ÀÌ·¯ÇÑ ¼­¹öµéÀº, ³×Æ®¿öÅ©·ÎºÎÅÍ ¿À´Â µ¥ÀÌ ÅÍ¿¡ ÀÇÇÑ ¸í·É °°ÀÌ ·Î±×ÀÎÀ» ÇÒ ¼ö ÀÖµµ·Ï óÀ½¿¡ root°¡ µÉ Çʿ䰡 ÀÖ´Ù.

ÇÁ·Î±×·¥ ºÎºÐ°ú Àμö ºÎºÐÀº ¼­¹ö¸¦ ½ÃÀÛÇÒ ¶§ ¼öÇàµÇ´Â ¸í·É¾î¸¦ ¸í½ÃÇÑ´Ù. ÇÁ·Î±×·¥Àº ¼öÇà°¡´É ÇÑ ÆÄÀÏÀÇ Àý´ë °æ·ÎÀÇ ÆÄÀÏÀ̸§À̾î¾ß ÇÑ´Ù. Àμö´Â È­ÀÌÆ®½ºÆäÀ̽º·Î ±¸ºÐµÈ ´Ü¾î·Î ±¸¼ºµÇ¾î, ÇÁ ·Î±×·¥ÀÇ ¸í·É¾î¶óÀÎ Àμö°¡ µÈ´Ù. ÀμöÀÇ Ã¹ ¹øÂ° ´Ü¾î´Â Àμö 0À¸·Î (µð·ºÅ丮 ¾øÀÌ) ÇÁ·Î±×·¥ÀÇ À̸§ ±×ÀÚü·Î µÈ´Ù.

¸¸¾à '/etc/inetd.conf'¸¦ ¼öÁ¤Çϸé, inetdÇÁ·Î¼¼½º¿¡°Ô SIGHUP½ÅÈ£¸¦ inetd¿¡°Ô ÆÄÀÏÀ» ´Ù½Ã Àаí, »õ·Î¿î ³»¿ëÀ» ¾ò°Ô ÇÏ¿©¾ß ÇÑ´Ù. ps¸¦ »ç¿ëÇÏ¿© inetdÀÇ ÇÁ·Î¼¼½ºID°¡ ¹Ù²î¾ú´ÂÁö È®ÀÎÇÏ¸é µÈ´Ù.

11.11 ¼ÒÄÏ ¿É¼Ç

ÀÌ Àå¿¡¼­´Â ¼ÒÄÏÀÇ Çൿ°ú ±× ¹Ø¿¡ ÀÖ´Â Åë½Å ÇÁ·ÎÅäÄÝÀ» º¯°æÇÏ´Â ¿©·¯ °¡Áö ¿É¼ÇÀ» ¼³Á¤Çϰí Àд ¹æ¹ýÀ» ¼­¼úÇÑ´Ù. ¼ÒÄϿɼÇÀ» ´Ù·ê ¶§, ¿É¼ÇÀÌ ¼ÓÇÏ´Â ·¹º§À» ¸í½ÃÇØ ÁÖ¾î¾ß ÇÑ´Ù. À̰ÍÀº ¿É¼Ç ÀÌ ¼ÒÄÏÀÎÅÍÆäÀ̽º¿¡ Àû¿ëµÇ´Â Áö, Àú¼öÁØ Åë½Å ÇÁ·ÎÅäÄÝ ÀÎÅÍÆäÀ̽º¿¡ Àû¿ëµÇ´Â Áö¸¦ ¼­¼úÇÑ´Ù.

11.11.1 ¼ÒÄÏ ¿É¼Ç ÇÔ¼ö

¿©±â¿¡ ¼ÒÄϿɼÇÀ» º¯°æÇÏ°í ½ÃÇèÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù. 'sys/socket.h'¾È¿¡ ±×°ÍµéÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

int getsockopt (int socket, int level, int optname, void *optval, size_t *optlen_ptr) ÇÔ¼ö

getsockoptÇÔ¼ö´Â socket¼ÒÄÏÀÇ level·¹º§ÀÇ optname ¿É¼ÇÀÇ ¿É¼Ç°ª¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò´Â´Ù.

¿É¼Ç °ªÀº optvalÀÌ °¡¸®Å°´Â ¹öÆÛ¿¡ ÀúÀåµÈ´Ù. È£Ãâ Àü¿¡, ÀÌ ¹öÆÛÀÇ Å©±âÀÎ *optlen_ptr¾È¿¡ Á¦°øÇØ ¾ß ÇÑ´Ù; ¹ÝȯÇÒ ¶§, ½ÇÁ¦·Î ¹öÆÛ¿¡ ÀúÀåµÈ Á¤º¸ÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ´ã°í ÀÖ´Ù.

´ëºÎºÐÀÇ ¿É¼ÇÀº optval¹öÆÛ¸¦ Á¤¼ö°ªÀ¸·Î ÇØ¼®µÈ´Ù.

¼º°ø½Ã getsockoptÀÇ ½ÇÁ¦¹Ýȯ°ªÀº 0ÀÌ°í ½ÇÆÐ½Ã -1ÀÌ´Ù. ´ÙÀ½¿¡ errno¿¡·¯Á¶°ÇÀÌ Á¤ÀǵǾî ÀÖ ´Ù.

EBADF socketÀμö°¡ À¯È¿ÇÑ ÆÄÀÏ ¼­¼úÀÚ°¡ ¾Æ´Ï´Ù.

ENOTSOCK ¼­¼úÀÚ socketÀÌ ¼ÒÄÏÀÌ ¾Æ´Ï´Ù.

ENOPROTOOPT optnameÀÌ ÁÖ¾îÁø ·¹º§¿¡ ¸ÂÁö ¾Ê´Ù.

int setsockopt (int socket, int level, int optname, void *optval, size_t optlen) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â socket¼ÒÄÏÀÇ level·¹º§¿¡ ¼ÒÄÏ¿É¼Ç optnameÀ» ¼³Á¤Çϴµ¥ »ç¿ëµÈ´Ù. ¿É¼ÇÀÇ °ªÀº optlen Å©±â¸¦ °¡Áø optval¹öÆÛ¿¡ Àü´ÞµÈ´Ù. setsockoptÀÇ ¹Ýȯġ¿Í ¿¡·¯ÄÚµå´Â getsockopt°ú °°´Ù.

11.11.2 ¼ÒÄÏ-·¹º§ ¿É¼Ç

int SOL__SOCKET »ó¼ö

ÀÌ Àý¿¡ ¼­¼úµÇ¾î ÀÖ´Â ¼ÒÄÏ·¹º§ ¿É¼ÇÀ» ´Ù·ç·Á¸é, getsockopt ³ª setsocketÀÇ levelÀμö·Î ÀÌ »ó¼ö¸¦ »ç¿ëÇ϶ó. ¿©±â¿¡ socket-level ¿É¼Ç À̸§ÀÇ Ç¥°¡ ÀÖ´Ù.; ¸ðµÎ 'sys/socket.h'Çì´õ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ ´Ù.

SO_DEBUG

ÇÏÀ§ ÇÁ·ÎÅäÄÝ ¸ðµâÀÇ µð¹ö±ë Á¤º¸ÀÇ ÀúÀåÇÒ °ÍÀΰ¡ ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ±×°ªÀº intÇüÀ» °¡Áø´Ù; 0ÀÌ ¾Æ´Ñ °ªÀº ÀúÀåÇϰڴٴ °ÍÀ» ÀǹÌÇÑ´Ù.

SO_REUSEADDR

ÀÌ ¿É¼ÇÀº bind( 11.3.2Àý [ÁÖ¼Ò ¼³Á¤], 152ÂÊÀ» º¸¶ó)°¡ ÀÌ ¼ÒÄÏÀÇ Áö¿ªÁÖ¼Ò¸¦ Àç»ç¿ëÇÏ´Â °ÍÀ» Çã¶ô ÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ Á¦¾îÇÑ´Ù. ¸¸¾à ÀÌ ¿É¼ÇÀ» °¡´ÉÇϵµ·Ï ÇÑ´Ù¸é, °°Àº ÀÎÅÍ³Ý Æ÷Æ®·ÎºÎÅÍ µÎ ¼ÒÄÏ À» °¡Áú¼ö ÀÖ°Ô µÈ´Ù; ±×·¯³ª, ½Ã½ºÅÛÀº ÀÎÅͳÝÀ» È¥¶õ½ÃŰ´Â µÎ º°°³ÀÇ À̸§À» °¡Áø ¼ÒÄÏÀ» »ç¿ëÇÏ ´Â °ÍÀ» Çã¶ôÇÏÁö ¾Ê´Â´Ù. ÀÌ ¿É¼ÇÀÌ ÀÖ´Â ÀÌÀ¯´Â FTP°°Àº »óÀ§ ÇÁ·ÎÅäÄÝÀÌ °°Àº ¼ÒÄϹøÈ£ÀÇ Àç»ç ¿ëÀ» À¯ÁöÇϱ⸦ ¿øÇϱ⠶§¹®ÀÌ´Ù. °ªÀº intÇüÀ» °¡Áö¸ç, 0ÀÌ ¾Æ´Ñ ¼ö´Â "±×·¸´Ù(yes)"¸¦ ÀǹÌÇÑ´Ù.

SO_KEEPALIVE

ÀÌ ¿É¼ÇÀº ÇÏÀ§ ÇÁ·ÎÅäÄÝÀÌ ÁÖ±âÀûÀ¸·Î ¸Þ½ÃÁö¸¦ ¿¬°áµÈ ¼ÒÄÏÀ¸·Î Àü¼ÛÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ Á¦¾îÇÑ´Ù. ¸¸¾à ¼­·Î ÀÌ·¯ÇÑ ¸Þ½ÃÁöÀÇ ÀÀ´äÀ» ½ÇÆÐÇÏ¸é ¿¬°áÀÌ ²÷¾îÁöµµ·Ï ÇÑ´Ù. °ªÀº intÇüÀ̰í 0ÀÌ ¾Æ´Ñ °ªÀº "±×·¸´Ù"¸¦ ÀǹÌÇÑ´Ù.

SO_DONTROUTE

ÀÌ ¿É¼ÇÀº ¼Û½ÅÇÏ´Â ¸Þ½ÃÁö°¡ ÀÏ¹Ý ¸Þ½ÃÁö ¶ó¿ìÆÃ ±â´ÉÀ» ¿ìȸÇÒ °ÍÀÎÁö ¿©ºÎ¸¦ Á¦¾îÇÑ´Ù. ¸¸¾à ¼³ Á¤µÇ¸é, ¸Þ½ÃÁö´Â Á÷Á¢ ³×Æ®¿öÅ© ÀÎÅÍÆäÀ̽º·Î º¸³»Áø´Ù. °ªÀº intÇüÀ̸ç 0ÀÌ ¾Æ´Ñ°ªÀº "±×·¸´Ù"ÀÇ ÀǹÌÀÌ´Ù.

SO_LINGER

ÀÌ ¿É¼ÇÀº ½Å·Úµµ ÀÖ´Â Àü´ÞÀ» º¸ÀåÇÏ´Â ¾î¶² ÇüÅÂÀÇ ¼ÒÄÏÀÌ ´ÝÈú ¶§ ¿©ÀüÈ÷ Àü¼ÛµÇÁö ¸øÇÑ ¸Þ½ÃÁö µéÀ» °¡Áö°í ÀÖÀ» ¶§, ¹«¾ùÀÌ ÀϾ °ÍÀÎÁö¸¦ ¸í½ÃÇÑ´Ù. 11.7.2Àý [¼ÒÄÏ ´Ý±â], 165ÂÊÀ» º¸¶ó. °ªÀº ±¸Á¶Ã¼ lingerÀÌ´Ù.

struct linger ÀÚ·áÇü

ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½ ¸â¹ö¸¦ °¡Áø´Ù:

int l_onoff

ÀÌ ºÎºÐÀº Âü°ÅÁþÀ¸·Î ÇØ¼®µÈ´Ù. ¸¸¾à 0ÀÌ ¾Æ´Ï¸é, close´Â µ¥ÀÌÅͰ¡ Àü´ÞµÇ°Å³ª ½Ã°£Á¦ÇÑÀÌ °æ°ú µÉ ¶§±îÁö ÇÁ·Î±×·¥ÀÇ ¼öÇàÀÌ ÁߴܵȴÙ.

int l_linger

À̰ÍÀº ÃÊ´ÜÀ§·Î ½Ã°£Á¦ÇÑÀ» ¸í½ÃÇÑ´Ù.

SO_BROADCAST

ÀÌ ¿É¼ÇÀº µ¥ÀÌÅͱ׷¥ÀÌ ¼ÒÄÏÀ¸·ÎºÎÅÍ ºê·Îµåij½ºÆ®µÉ °ÍÀÎÁö ¿©ºÎ¸¦ Á¦¾îÇÑ´Ù. °ªÀº intÇüÀ̰í 0ÀÌ ¾Æ´Ñ °ªÀº "±×·¸´Ù"¸¦ ÀǹÌÇÑ´Ù.

SO_OOBINLINE

¸¸¾à ÀÌ ¿É¼ÇÀÌ ¼³Á¤µÇ¸é, ¼ÒÄÏ¿¡ ¼ö½ÅµÈ out-of-band µ¥ÀÌÅͰ¡ º¸Åë ÀԷ ť¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù. ÀÌ°Í Àº MSG_OOBÇ÷¢ ¸í½Ã ¾øÀÌ read³ª recv¸¦ »ç¿ëÇÏ¿© ±×°ÍÀ» ÀÐÀ»¼ö ÀÖµµ·Ï ÇÑ´Ù. 11.8.8Àý [Out-of-Band µ¥ÀÌÅÍ], 173ÂÊÀ» º¸¶ó. °ªÀº Á¤¼öÇüÀ̸ç 0ÀÌ ¾Æ´Ñ °ªÀº "±×·¸´Ù"¸¦ ÀǹÌÇÑ´Ù.

SO_SNDBUF

ÀÌ ¿É¼ÇÀº Ãâ·Â¹öÆÛÀÇ Å©±â¸¦ ¾ò°Å³ª ¼³Á¤ÇÑ´Ù. °ªÀº size_tÇüÀ̰í, ¹ÙÀÌÆ® Å©±âÀÌ´Ù.

SO_RCVBUF

ÀÌ ¿É¼ÇÀ¸ ÀԷ¹öÆÛÀÇ Å©±â¸¦ ¾ò°Å³ª ¼³Á¤ÇÑ´Ù. °ªÀº size_tÇüÀ̰í, ¹ÙÀÌÆ® Å©±âÀÌ´Ù.

SO_STYLE

SO_TYPE

ÀÌ ¿É¼ÇÀº getsockopt¿¡¸¸ »ç¿ëµÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×°ÍÀº ¼ÒÄÏÀÇ Åë½Å ½ºÅ¸ÀÏÀ» ¾ò´Âµ¥ »ç¿ëµÈ´Ù. SO_TYPEÀº ÀüÅëÀûÀÎ À̸§À̰í SO_STYLEÀº GNU¿¡¼­ äÅÃÇÑ À̸§ÀÌ´Ù. °ªÀº intÇüÀ̰í, Åë½Å½º ŸÀÏÀ» ³ªÅ¸³½´Ù. 11.2Àý [Åë½Å ½ºÅ¸ÀÏ], 150ÂÊÀ» º¸¶ó.

SO_ERROR

ÀÌ ¿É¼ÇÀº getsockopt¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼ÒÄÏÀÇ ¿¡·¯»óŸ¦ ¸®¼ÂÇϴµ¥ »ç¿ëµÈ´Ù. °ªÀº intÇüÀ̰í Àü¹øÀÇ ¿¡·¯ »óŸ¦ ³ªÅ¸³½´Ù.

11.12 ³×Æ®¿öÅ© µ¥ÀÌÅͺ£À̽º

¸¹Àº ½Ã½ºÅÛÀº ½Ã½ºÅÛ °³¹ßÀڵ鿡°Ô ¾Ë·ÁÁø ³×Æ®¿öÅ© ¸®½ºÆ®¸¦ ±â·ÏÇÏ´Â µ¥ÀÌÅͺ£À̽º¸¦ °¡Áö°í ÀÖ´Ù. À̰ÍÀº º¸Åë '/etc/networks' ¶Ç´Â ³×ÀÓ¼­¹öÀÇ °°Àº ÆÄÀÏÀ» À¯ÁöÇÑ´Ù. ÀÌ µ¥ÀÌÅͺ£À̽º´Â route °°Àº ¶ó¿ìÆÃ ÇÁ·Î±×·¥¿¡¼­ À¯¿ëÇÏ´Ù. ±×·¯³ª ³×Æ®¿öÅ©¸¦ ÅëÇØ ´Ü¼øÈ÷ Åë½ÅÇÏ´Â ÇÁ·Î±×·¥¿¡°Ô´Â º° Çʿ䰡 ¾ø´Ù. ¿ì¸®´Â 'netdb.h'¿¡ ¼±¾ðµÈ ÀÌ µ¥ÀÌÅͺ£À̽º Á¢±Ù ÇÔ¼ö¸¦ º¼ °ÍÀÌ´Ù.

struct netent ÀÚ·áÇü

ÀÌ ÀÚ·áÇüÀº ³×Æ®¿öÅ© µ¥ÀÌÅÍ º£À̽ºÀÇ ¿ä¼Ò¿¡ °üÇÑ Á¤º¸¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº ´ÙÀ½ ¸ã¹ö ¸¦ °¡Áø´Ù.

char *n_name

À̰ÍÀº ³×Æ®¿öÅ©ÀÇ °ø½ÄÀûÀÎ À̸§ÀÌ´Ù.

char **n_aliases

³×Æ®¿öÅ©ÀÇ ¶Ç´Ù¸¥ À̸§µéÀÌ ¹®ÀÚ¿­ÀÇ º¤ÅÍó·³ Ç¥ÇöµÇ¾î ÀÖ´Ù. ³ÎÆ÷ÀÎÅÍ·Î ¹è¿­ÀÌ ³¡³­´Ù.

int n_addrtype

À̰ÍÀº ³×Æ®¿öÅ© ¹øÈ£ÀÇ Á¾·ùÀÌ´Ù.; À̰ÍÀº ÀÎÅÍ³Ý ³×Æ®¿öÅ©¿¡ ´ëÇØ Ç×»ó AF_INETÀÌ´Ù.

unsigned long int n_net

À̰ÍÀº ³×Æ®¿öÅ© ¹øÈ£ÀÌ´Ù. ³×Æ®¿öÅ© ¹øÈ£´Â È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼­·Î ¹ÝȯµÈ´Ù. 11.5.5Àý [¹ÙÀÌÆ® ¼ø ¼­], 161ÂÊÀ» º¸¶ó.

ƯÁ¤ ³×Æ®¿öÅ©¿¡ °üÇÑ Á¤º¸¸¦ À§ÇØ ³×Æ®¿öÅ© µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇϱâ À§ÇØ getnetbyname ¶Ç´Â getnetbyaddrÇÔ¼ö¸¦ »ç¿ëÇ϶ó. Á¤º¸´Â Á¤ÀûÀ¸·Î ÇÒ´çµÈ ±¸Á¶Ã¼¿¡ Á¤º¸°¡ ¹ÝȯµÈ´Ù.; ¸¸¾à ±×°ÍÀ» Àú ÀåÇÒ Çʿ䰡 ÀÖÀ¸¸é ±× Á¤º¸¸¦ º¹»çÇØµÎ¾î¾ß ÇÑ´Ù.

struct netent * getnetbyname (const char *name) ÇÔ¼ö

getnetbynameÇÔ¼ö´Â nameÀ̶ó´Â ³×Æ®¿öÅ©¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ±×¿Í °°Àº ³×Æ®¿öÅ©°¡ ¾ø À¸¸é ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

struct netent * getnetbyaddr (long net, int type) ÇÔ¼ö

getnetbyaddrÇÔ¼ö´Â type¶ó´Â Á¾·ù¿Í net¶ó´Â ¼ýÀÚ¸¦ °¡Áø ³×Æ®¿öÅ©¿¡ °üÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ÀÎÅÍ ³Ý ³×Æ®¿öÅ©ÀÇ Á¾·ù¸¦ À§Çؼ­ AF_INET°ªÀ» ¸í½ÃÇØ¾ß ÇÑ´Ù. getnetbyaddrÀº ¸¸¾à ±×·¯ÇÑ ³×Æ®¿öÅ© °¡ ¾øÀ¸¸é ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù. ¶ÇÇÑ setent, getnetent ¿Í endnetent¸¦ »ç¿ëÇÏ¿© ³×Æ®¿öÅ© µ¥ÀÌÅÍ º£À̽º¸¦ ÀÏÀÏÀÌ »ìÇʼö ÀÖ´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§´Â ÁÖÀÇÇ϶ó. ±×°ÍµéÀº ÀçÁøÀÔ¼ºÀÌ ¾ø±â ¶§¹® ÀÌ´Ù.

void setnetent (int stayopen) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ³×Æ®¿öÅ© µ¥ÀÌÅͺ£À̽º¸¦ ¸Ç¾ÕºÎÅÍ ÀÐÀ»¼ö ÀÖµµ·Ï ÇÑ´Ù. ¸¸¾à stayopenÀμö°¡ 0ÀÌ ¾Æ´Ï ¸é, Ç÷¢À» ¼¼Æ®ÇÏ¿© ÃßÈÄÀÇ getnetbynameÀ̳ª getnetbyaddr È£ÃâÀÌ (º¸Åë ±× ÇÔ¼öµéÀÌ ´ÝÀ¸¹Ç·Î)µ¥ ÀÌÅͺ£À̽º¸¦ ´ÝÁö ¾Êµµ·Ï ÇÑ´Ù. ¸¸¾à °¢ È£Ãâ½Ã µ¥ÀÌÅͺ£À̽º¸¦ ´Ù½Ã ¿©´Â °ÍÀ» ÇÇÇÏ¿© ±×·¯ÇÑ ÇÔ ¼ö¸¦ ¿©·¯¹ø È£ÃâÇÒ ¶§ ¸Å¿ì À¯¿ëÇÏ´Ù.

struct netent * getnetent (void) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ³×Æ®¿öÅ© µ¥ÀÌÅͺ£À̽ºÀÇ ´ÙÀ½ ¿ä¼Ò¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ´õ ÀÌ»óÀÇ ¿ä¼Ò°¡ ¾øÀ¸¸é ³ÎÆ÷ÀÎ Å͸¦ ¹ÝȯÇÑ´Ù.

void endnetent (void) ÇÔ¼ö

ÀÌ ÇÔ¼ö´Â ³×Æ®¿öÅ© µ¥ÀÌÅÍ º£À̽º¸¦ ´Ý´Â´Ù.