gethostbyname(3)
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>gethostbyname(3)



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/05/06           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>gethostbyname(3)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ³×Æ®¿÷ È£½ºÆ® ¸ñ·ÏÀ» °¡Á®¿Â´Ù. 
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <netdb.h> 
extern int h_errno; 
 
struct hostent *gethostbyname(const char *name); 
 
#include <sys/socket.h>      /* for AF_INET */ 
struct hostent *gethostbyaddr(const char *addr, 
  int len, int type); 
 
void sethostent(int stayopen); 
 
void endhostent(void); 
 
void herror(const char *s); 
 
const char * hstrerror(int err); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        gethostbyname()ÇÔ¼ö´Â ÁÖ¾îÁø È£½ºÆ® <emphasis>name</emphasis>¿¡  
        »óÀÀÇÏ´Â <emphasis>hostent</emphasis>ŸÀÔÀÇ ±¸Á¶Ã¼¸¦ ¹ÝȯÇÑ´Ù.  
        nameÀº È£½ºÆ®À̸§À̰ųª Ç¥ÁØ Á¡ Ç¥±â¹ýÀÇ IPv4ÁÖ¼Ò, ȤÀº IPv6ÁÖ¼ÒÀÌ´Ù.      
        IPv6¿¡ ´ëÇÑ ³»¿ëÀº <ulink url="http://www.joinc.co.kr/modules.php?name=News&file=article&sid=103">IPv6 ȯ°æ¼³Á¤</ulink>À» Âü°íÇϱ⠹ٶõ´Ù. 
    </para> 
    <para> 
        ¸¸ÀÏ nameÀÌ IPv4³ª IPv6ÁÖ¼Ò¶ó¸é ¾î¶°ÇÑ Ã£±âµµ ÇàÇØÁöÁö ¾Ê°í ´ÜÁö  
        nameÀ» <emphasis>h_name</emphasis>Çʵ忡 º¹»çÇϰí ÇØ´ç in_addr ±¸Á¶Ã¼¸¦ 
        ¹ÝȯÇÏ´Â hostent ±¸Á¶Ã¼ÀÇ h_addr_list[0]¿¡ º¹»çÇÑ´Ù. ¸¸ÀÏ nameÀÌ Á¡À¸·Î 
        ³¡³ªÁö ¾Ê°í ȯ°æº¯¼ö <emphasis>HOSTALIASES</emphasis>°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é 
        HOSTALIASES°¡ °¡¸®Å°´Â º°Äª ÆÄÀÏÀÌ nameÀ» À§ÇØ ¿ì¼± Ž»öµÈ´Ù. ÇöÀç  
        µµ¸ÞÀΰú »óÀ§ µµ¸ÞÀÎÀº nameÀÌ Á¡À¸·Î ³¡³ªÁö ¾Ê´Â´Ù¸é Ž»öµÈ´Ù. 
    </para> 
    <para> 
        gethostbyaddr()ÇÔ¼ö´Â ±æÀÌ <emphasis>len</emphasis>, ÁÖ¼ÒŸÀÔÀÌ typedls 
        È£½ºÆ® ÁÖ¼Ò <emphasis>addr</emphasis>¿¡ ÇØ´çÇÏ´Â  
        <emphasis>hostent</emphasis>±¸Á¶Ã¼¸¦ ¸®ÅÏÇÑ´Ù. À¯ÀÏÇÏ°Ô À¯È¿ÇÑ ÁÖ¼Ò  
        ŸÀÔÀº ÇöÀç AF_INETÀÌ´Ù.     
    </para> 
    <para> 
        ¸¸ÀÏ stayopenÀÌ Âü(1)À̶ó¸é, sethostent()ÇÔ¼ö´Â ¿¬°áµÈ TCP¼ÒÄÏÀÌ ³×ÀÓ 
        ¼­¹ö ÁúÀǸ¦ À§ÇØ »ç¿ëµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ» °¡¸®Å²´Ù. ±×·¸Áö ¾ÊÀ¸¸é  
        ³×ÀÓ ¼­¹öÁúÀÇ¿¡ UDP¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù. 
    </para> 
    <para> 
        endhostent()ÇÔ¼ö´Â ³×ÀÓ ¼­¹ö ÁúÀǸ¦ À§ÇÑ TCP¿¬°áÀ» ³¡³½´Ù. 
    </para> 
    <para> 
        herror()ÇÔ¼ö´Â stderr¿¡ ÇöÀç °ªÀÇ h_errno¿¡ »óÀÀÇÏ´Â ¿¡·¯ ¸Þ½ÃÁö¸¦  
        Ãâ·ÂÇÑ´Ù. ±¸½ÄÀ¸·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù.  
    </para> 
    <para> 
        hsterror()ÇÔ¼ö´Â ¿¡·¯ ³Ñ¹ö¸¦ °¡Áö¸ç »óÀÀÇÏ´Â ¸Þ½ÃÁö¸¦ ¹ÝȯÇÑ´Ù.  
        ±¸½ÄÀ¸·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù. 
    </para> 
    <para> 
        µµ¸ÞÀÎ À̸§ ÁúÀÇ´Â gethostbyname()¿¡ ÀÇÇØ ¼öÇàµÇ¸ç gethostbyaddr()Àº 
        /etc/host.conf¿¡ ÀÖ´Â order¶óÀÎÀÇ ³»¿ë¿¡ ÀÇÁ¸ÇÏ¿© /etc/hosts¿¡¼­  
        ¶óÀÎÀ» »Ì¾Æ³» ³×ÀÓ¼­¹öÀÇ ÀϺγª ¸ðµÎÀÇ Á¶ÇÕ°ú NISȤÀº YP¸¦ »ç¿ëÇÑ´Ù. 
    </para> 
    <para> 
        hostent ±¸Á¶Ã¼´Â <netdb.h>¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.     
        <screen> 
struct hostent { 
        char    *h_name;        /* È£½ºÆ®ÀÇ °ø½Ä À̸§ */ 
        char    **h_aliases;    /* º°Äª ¸®½ºÆ® */ 
        int     h_addrtype;     /* È£½ºÆ® ÁÖ¼Ò Å¸ÀÔ */ 
        int     h_length;       /* ÁÖ¼ÒÀÇ ±æÀÌ */ 
        char    **h_addr_list;  /* ÁÖ¼Ò ¸®½ºÆ® */ 
} 
#define h_addr  h_addr_list[0]  /* ±¸ ¹öÀü°úÀÇ È£È¯À» À§ÇØ */ 
        </screen> 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        gethostbyname() ±×¸®°í gethostbyaddr() ÇÔ¼ö´Â hostent ±¸Á¶Ã¼¸¦  
        ¹ÝȯÇϰųª ¸¸ÀÏ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é NULL Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.   
        ¿¡·¯½Ã, h_errno º¯¼ö´Â ¿¡·¯ ³Ñ¹ö¸¦ °¡Áø´Ù. 
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        º¯¼ö h_errno´Â ´ÙÀ½ °ªµéÀ» °¡Áø´Ù. 
        <variablelist>     
            <varlistentry> 
            <term>HOST_NOT_FOUND</term>     
            <listitem> 
                <para>     
                    ÁöÁ¤µÈ È£½ºÆ®°¡ ¾Ë·ÁÁöÁö ¾Ê¾Ò´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>NO_ADDRESS, NO_DATA</term>     
            <listitem> 
                <para>     
                    ¿ä±¸ÇÑ À̸§ÀÌ À¯È¿ÇÏÁö¸¸ IPÁÖ¼Ò¸¦ °¡ÁöÁö ¾Ê´Â´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>NO_RECOVERY</term>     
            <listitem> 
                <para>     
                    º¹±¸ ºÒ°¡´ÉÇÑ ³×ÀÓ ¼­¹ö¿¡·¯°¡ ¹ß»ýÇß´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>TRY_AGIN</term>     
            <listitem> 
                <para>     
                    ÀϽÃÀûÀ¸·Î ¹ß»ýÇÑ ¿¡·¯·Î ³×ÀÓ¼­¹ö ÀÎÁõ½Ã ¹ß»ýÇß´Ù. ´Ù½Ã  
                    ½ÃµµÇÏ¸é µÈ´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <netdb.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> 
 
int main(int argc, char **argv) 
{ 
    struct hostent     *myent; 
    struct in_addr *myen; 
    long int *add; 
 
    myent = gethostbyname(argv[1]); 
    if (myent == NULL) 
    { 
        perror("ERROR : "); 
        exit(0); 
    } 
 
    printf("%s\n", myent->h_name); 
 
    while(*myent->h_addr_list != NULL) 
    { 
        add = (long int *)*myent->h_addr_list; 
        myen->s_addr = *add; 
        printf("%s\n", inet_ntoa(*myen)); 
        myent->h_addr_list++; 
    } 
} 
        </screen> 
        ´ÙÀ½Àº Å×½ºÆ® °á°ú´Ù. 
        <screen> 
[root@localhost test]# ./gethostbyname www.yahoo.com 
www.yahoo.akadns.net                                                            
66.218.71.83                                                                    
66.218.71.84                                                                    
66.218.71.86                                                                    
66.218.71.87                                           
66.218.71.89                                                                    
... 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_ÀÎÅͳÝ_ÁÖ¼Ò_º¯È¯">ÀÎÅÍ³Ý ÁÖ¼Ò º¯È¯</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.