gethostbyname¿¡¼­ timeout ó¸®Çϱâ
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



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:1 
 
options¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì 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 
        } 
    } 
} 
 

½Ã±×³ÎÀÇ »ç¿ëÀÌ ²¬Â½Áö±ÙÇÏ´Ù¸é, [http]adns°°Àº ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â °Íµµ ¹æ¹ýÀ̰ڴÙ.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.