ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 ¼ÒÄϿɼÇ
³×Æ®¿öÅ© ȯ°æÀº º¹Àâ ´Ù¾çÇÏ¸ç ¿¹ÃøÇϱâ Èûµç ÀϵéÀÌ ¸¹ÀÌ ¹ß»ýÇÑ´Ù. ÀÌ·± ÀÌÀ¯·Î ³×Æ®¿öÅ©ÇÁ·Î±×·¥ÀÇ Á¾·ù¿¡ µû¶ó¼ ¼ÒÄÏÀÇ ¼¼ºÎ»çÇ×À» Á¶ÀýÇØ¾ß ÇÒ ¶§°¡ ÀÖ´Ù. ¼ÒÄÏÀº ¼ÒÄϿɼÇÀ» Á¶ÀÛÇØ¼ ¼¼ºÎ»çÇ×À» Á¶ÀýÇÒ ¼ö Àִµ¥, À̸¦ À§Çؼ getsockopt()¿Í setsockopt()µÎ °³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ getsockopt´Â ÇöÀçÀÇ ¼ÒÄϿɼǰªÀ» °¡Á®¿À±â À§Çؼ, setsockopt´Â ¼ÒÄϿɼǰªÀ» º¯°æÇϱâ À§Çؼ »ç¿ëÇÑ´Ù.
´ÙÀ½Àº À̵é ÇÔ¼öÀÇ »ç¿ë¹æ¹ýÀÌ´Ù. #include <sys/types.h> #include <sys/socket.h> int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
SOL_SOCKET·¹º§¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿É¼Ç°ú µ¥ÀÌŸÇüÀº ´ÙÀ½°ú °°´Ù.
IPPROTO_TCP·¹º§¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿É¼Ç°ú µ¥ÀÌÅÍÇüÀÌ´Ù.
1.1 SO_REUSEADDR
¼ÒÄÏÀ» ÀÌ¿ëÇÑ ¼¹öÇÁ·Î±×·¥À» ¿î¿ëÇÏ´Ù º¸¸é °Á¦Á¾·áµÇ°Å³ª ºñÁ¤»ó Á¾·áµÇ´Â °æ¿ì°¡ ¹ß»ýÇÑ´Ù. Å×½ºÆ®¸¦ ¸ñÀûÀ¸·Î ÇÒ °æ¿ì¿¡´Â ƯÈ÷ °Á¦Á¾·á ½ÃÄÑ¾ß ÇÏ´Â °æ¿ì°¡ ÀÚÁÖ ¹ß»ýÇϴµ¥, °Á¦Á¾·á ½Ã۰í ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇà½Ãų°æ¿ì ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö¸¦ Á¾Á¾ º¸°Ô µÈ´Ù. bind error : Address already in useÀÌ´Â ±âÁ¸ ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¾úÁö¸¸, ºñÁ¤»óÁ¾·áµÈ »óÅ·Π¾ÆÁ÷ Ä¿³ÎÀÌ bindÁ¤º¸¸¦ À¯ÁöÇϰí ÀÖÀ½À¸·Î ¹ß»ýÇÏ´Â ¹®Á¦´Ù. º¸Åë 1-2ºÐ Á¤µµ Áö³ª¸¸ Ä¿³ÎÀÌ ¾Ë¾Æ¼ Á¤¸®¸¦ Çϱä ÇÏÁö¸¸, ±× ½Ã°£µ¿¾È ±â´Þ·Á¾ß ÇÑ´Ù´Â °ÍÀº »ó´çÈ÷ ¹ø°Å·Î¿î ÀÏÀÌ´Ù. ÀÌ °æ¿ì ´ÙÀ½°ú °°Àº Äڵ带 »ðÀÔÇÔÀ¸·Î½á ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. int sock = socket(...); setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&bf, (int)sizeof(bf));ÀÌ·¸°Ô Çϸé Ä¿³ÎÀº ±âÁ¸¿¡ bind·Î ÇÒ´çµÈ ¼ÒÄÏÀÚ¿øÀ» ÇÁ·Î¼¼½º°¡ Àç »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¶ôÇÑ´Ù. 1.2 ¼ÒÄÏ ¹öÆÛ
SO_SNDBUF´Â Àü¼Û¼ÒÄÏ¿¡¼ »ç¿ëÇÒ ÃÖ´ë ¹öÆÛÀÇ Å©±â¸¦ ¼³Á¤ÇÑ´Ù. Ä¿³ÎÀº setsockopt·Î ¼³Á¤ ÇÑ °ªÀÇ 2¹è¸¦ ¹öÆÛ Å©±â·Î Àâ´Â´Ù. Àü¼Û¼ÒÄÏ ¹öÆÛÀÇ ±âº» Å©±â´Â /proc/sys/net/core/wmem_default¿¡¼, ¼³Á¤ °¡´ÉÇÑ ÃÖ´ë Å©±â´Â /proc/sys/net/core/wmem_max¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
SO_RCVBUF´Â ¼ö½Å¼ÒÄÏ¿¡¼ »ç¿ëÇÒ ÃÖ´ë ¹öÆÛ Å©±â¸¦ ¼³Á¤ÇÑ´Ù. Ä¿³ÎÀº setsockopt·Î ¼³Á¤ ÇÑ °ªÀÇ 2¹è¸¦ ¹öÆÛ Å©±â·Î Àâ´Â´Ù. Àü¼Û¼ÒÄÏ ¹öÆÛÀÇ ±âº» Å©±â´Â /proc/sys/net/core/rmem_default¿¡¼, ¼³Á¤ °¡´ÉÇÑ ÃÖ´ë Å©±â´Â /proc/sys/net/core/rmem_max¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº ¼ÒÄϹöÆÛÀÇ Å©±â¸¦ °¡Á®¿À°í ¼³Á¤ÇÏ´Â ¿ÏÀüÇÑ ÄÚµå´Ù. #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <unistd.h> #include <stdio.h> #include <string.h> int main(int argc, char **artv) { int s; int bsize = 0; int rn; rn = sizeof(int); s = socket(AF_INET, SOCK_STREAM, 0); // ÇöÀç Àü¼Û ¼ÒÄÏ ¹öÆÛÀÇ Å©±â¸¦ °¡Á®¿Â´Ù. getsockopt(s, SOL_SOCKET, SO_SNDBUF, &bsize, (socklen_t *)&rn); printf("Send buf size : %d\n", bsize); // ÇöÀç ¹öÆÛ Å©±â¿¡ * 2¸¦ÇÑ´Ù. bsize = bsize * 2; setsockopt(s, SOL_SOCKET, SO_SNDBUF, &bsize, (socklen_t)rn); // ÇöÀç ¹öÆÛÅ©±â¸¦ °¡Á®¿Â´Ù. // Ä¿³ÎÀº * 2¸¸Å ¹öÆÛÅ©±â¸¦ ¼³Á¤ÇϹǷÎ, ÃÖÃÊ Å©±âÀÇ 4¹è¸¸Å ¼³Á¤µÆÀ» °ÍÀÌ´Ù. getsockopt(s, SOL_SOCKET, SO_SNDBUF, &bsize, (socklen_t *)&rn); printf("Send buf size : %d\n", bsize); }
SO_RCVBUF´Â ¼ÒÄÏÀÇ window Å©±â¸¦ °áÁ¤ÇÑ´Ù. windows Å©±â¿¡ ´ëÇÑ ³»¿ëÀº windows size¹®¼¸¦ Âü°íÇÑ´Ù. 1.3 TCP_NODELAY
ÀÌ ¿É¼ÇÀ» ÀÌÇØÇÏ·Á¸é Nagle¾Ë°í¸®Áò¿¡ ´ëÇØ¼ ÀÌÇØ¸¦ ÇØ¾ß ÇÑ´Ù. Nagle ¾Ë°í¸®ÁòÀÌ Àû¿ëµÇ¸é, ¿î¿µÃ¼Á¦´Â ÆÐŶÀ» ACK°¡ ¿À±â¸¦ ±â´Ù·È´Ù°¡ µµÂøÇϸé, ±× µ¿¾È ½×¿©ÀÖ´ø µ¥ÀÌÅ͸¦ ÇѲ¨¹ø¿¡ º¸³»°Ô µÈ´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀ» »ç¿ëÇÏ°Ô µÇ¸é, ´ë¿ªÆøÀÌ ³·Àº WAN¿¡¼ ºó¹øÇÑ Àü¼ÛÀ» ÁÙÀÌ°Ô µÊÀ¸·Î È¿°úÀûÀÎ ´ë¿ªÆøÈ°¿ëÀÌ °¡´ÉÇØÁø´Ù.
´ëºÎºÐÀÇ °æ¿ì¿¡ ÀÖ¾î¼ Nagle ¾Ë°í¸®ÁòÀº È¿À²ÀûÀ¸·Î ÀÛµ¿Çϱä ÇÏÁö¸¸, ºó¹øÇÑ ÀÀ´äÀÌ Áß¿äÇÑ ¼ºñ½ºÀÇ °æ¿ì¿¡´Â Àû´çÇÏÁö ¾ÊÀº °æ¿ì°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î X-TerminalÀ» ÀÌ¿ëÇÒ °æ¿ì ¸¶¿ì½º À̺¥Æ®´Â Áï½Ã Àü´ÞµÉ Çʿ䰡 Àִµ¥, Nagle¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¸é ¾Æ¹«·¡µµ ¹ÝÀÀ½Ã°£ÀÌ ¶³¾îÁö°Ô µÉ °ÍÀÌ´Ù. ½Ç½Ã°£ÀûÀÎ ¹ÝÀÀÀÌ Áß¿äÇÑ ¿Â¶óÀÎ °ÔÀÓ¿ª½Ã Nagle ¾Ë°í¸®ÁòÀ» Á¦°ÅÇÏ´Â°Ô ÁÁÀ» °ÍÀÌ´Ù.
¾Æ·¡ÀÇ À̹ÌÁö´Â nagleÀÌ Àû¿ëµÇ¾úÀ» ¶§¿Í ±×·¸Áö ¾ÊÀ» ¶§, ¾î¶»°Ô µ¥ÀÌÅÍ Àü¼ÛÀÌ ÀϾ´ÂÁö¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.
Upload new Attachment "nagle.png" 1.4 SO_LINGER
SO_LINGERÀº ¼ÒÄÏÀÌ close()µÇ¾úÀ» ¶§, ¼ÒÄϹöÆÛ¿¡ ³²¾ÆÀÖ´Â µ¥ÀÌÅ͸¦ ¾î¶»°Ô ÇÒ °ÍÀÌÁö¸¦ °áÁ¤Çϱâ À§Çؼ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº SO_LINGER ¿É¼Ç¿¡ »ç¿ëµÇ´Â µ¥ÀÌÅͱ¸Á¶Ã¼ÀÌ´Ù. struct linger
{
int l_onoff;
int l_linger;
}
2 Âü°í¹®Çå |
|
||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|