ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. gethostbyname¿¡¼ timeout ó¸®Çϱâ
gethostbynameÀº µµ¸ÞÀÎÀ̸§¿¡ ´ëÇÑ ÁÖ¼Ò¸¦ ¾ò¾î¿À´Â ¼ÒÄÏÇÔ¼ö·Î /etc/resolv.conf¿¡ µî·ÏµÈ DNS¼¹ö·Î ÁúÀǸ¦ º¸³»¼ IP ÁÖ¼Ò¸¦ °¡Á®¿Â´Ù. gethostbyname°ü·Ã ³»¿ëÀº ÀÎÅÍ³Ý ÁÖ¼Òº¯È¯¹®¼¸¦ Âü°íÇÏÀÚ.
ÀÌ ÇÔ¼ö´Â Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª ÀÔÃâ·Â °úÁ¤ÀÌ °¨Ãß¾îÁ® ÀÖ¾î¼, timeout󸮸¦ ÇÒ ¼ö ¾ø´Ù´Â ¹®Á¦°¡ ÀÖ´Ù. timeout 󸮸¦ À§ÇÑ ¹æ¹ý¿¡ ´ëÇØ¼ °í¹ÎÇØ º¸·Á°í ÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ® ¼³Á¤
¸®´ª½º´Â /etc/resolv.conf¿¡ DNS(Domain Name Server) ¸ñ·ÏÀ» °ü¸®Çϴµ¥, resolv.conf¿¡ ¿É¼ÇÀ¸·Î timeout ½Ã°£À» º¯°æÇÒ ¼ö ÀÖ´Ù. resolv.conf¿¡¼ timeout °ü·ÃµÈ optionÀÇ À̸§Àº timeoutÀ̸ç ÃÊ´ÜÀ§·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. nameserver 168.111.63.1 nameserver 168.111.63.2 options timeout:1options¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì 5Ãʰ¡ ±âº» °ªÀ¸·Î ¼³Á¤µÈ´Ù.
¸¸¾à timeout ½Ã°£µ¿¾È DNS·ÎºÎÅÍ ÀÀ´äÀÌ ¾øÀ¸¸é retry¸¦ ½ÃµµÇϴµ¥, ¿ª½Ã ¿É¼ÇÀ¸·Î ÀÌ °ªÀ» Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. timeout°ú retry Ƚ¼ö¸¦ ÀÛ°ÔÇÏ´Â °ÍÀ¸·Î ÇÁ·Î±×·¥ÀÇ ÀÀ´ä¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù. options timeout:1 retry:1 ÇÁ·Î±×·¥ Â÷¿ø¿¡¼ timeout ¼³Á¤
gethostbyname ÇÔ¼ö¿Í getaddrinfo ÇÔ¼ö´Â timeoutÀ» ¼³Á¤ÇÒ ¼ö ¾øÀ¸¸ç, /etc/resolv.conÀÇ timeoutÀ» µû¸¥´Ù. resolv.conf¿¡ timeoutÀ» ¼³Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é ±âº» °ªÀ» »ç¿ëÇϴµ¥, /usr/include/resolv.h¿¡ RES_TIMEOUT·Î Á¤ÀǵŠÀÖ´Ù. (¾Æ¸¶ 5·Î ÁöÁ¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù.)
resolv.confÀÇ timeout °ú retry °ªÀ» ¼öÁ¤ÇÏ¸é ¾î´ÀÁ¤µµ timeoutÀ» Àû¿ëÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖÁö¸¸ ±Ùº»ÀûÀÎ ÇØ°áÃ¥Àº ¾Æ´Ï´Ù. resolv.conf ÆÄÀÏÀ» ¼öÁ¤ÇÏ·Á¸é ·çÆ®±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù´Â ºÎ´ãÀÌ Àֱ⠶§¹®ÀÌ´Ù. ´Ù¸¥ ¹æ¹ýÀ» ã¾ÆºÁ¾ß ÇÒ °Í °°´Ù.
°¡Àå ½¬¿î ¹æ¹ýÀº alarm(2)À» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.
jmp_buf env; // ½Ã±×³Î Çڵ鷯, env·Î °ª 1À» °¡Áö°í jumpÇÑ´Ù. void sighandler(int signum) { printf("longjmp\n"); longjmp(env, 1); } void dnslookup(char *request) { struct hostent *host = NULL; signal(SIGALRM, sighandler); // 1Ãʵ¿¾È ÀÀ´äÀÌ ¾øÀ¸¸é ½Ã±×³Î Çڵ鷯°¡ ½ÇÇàµÈ´Ù. // ½Ã±×³Î Çڵ鷯´Â °ª 1À» °¡Áö°í env·Î Á¡ÇÁÇϱ⠶§¹®¿¡ // else ¹®ÀÌ ½ÇÇàµÈ´Ù. if(setjmp(env) == 0) { alarm(1); host = gethostbyname(request); signal(SIGALRM, SIG_DFL); // SIGALRM ½Ã±×³ÎÀ» ±âº»¼³Á¤À¸·Î ÇÑ´Ù. alarm(0); if(host == NULL) { } else { // ¸ñ·ÏÀ» ó¸®ÇÑ´Ù. } } else { if(host == NULL) { // timeout } } } |
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|