getnameinfo

Autres langues

Langue: ja

Version: 2007-06-08 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

getnameinfo - ¥¢¥É¥ì¥¹¤«¤é̾Á°¤Ø¤ÎÊÑ´¹¤ò¥×¥í¥È¥³¥ë¤Ë°Í¸¤·¤Ê¤¤¤«¤¿¤Á¤Ç¹Ô¤¦

½ñ¼°


#include <sys/socket.h>

#include <netdb.h>



int getnameinfo(const struct sockaddr *sa, socklen_t salen,

                char *host, size_t hostlen,

                char *serv, size_t servlen, int flags);

ÀâÌÀ

getnameinfo(3) ´Ø¿ô¤Ï¡¢¥¢¥É¥ì¥¹¤«¤é¥Î¡¼¥É̾¤Ø¤ÎÊÑ´¹¤ò ¥×¥í¥È¥³¥ë¤Ë°Í¸¤·¤Ê¤¤¤«¤¿¤Á¤Ç¹Ô¤¦¤¿¤á¤Ëµ¬Äꤵ¤ì¤¿¡£ ¤³¤Î´Ø¿ô¤Ï gethostbyaddr(3) ¤È getservbyport(3) ¤Îµ¡Ç½¤ò°ì¤Ä¤Ë¤·¤¿¤â¤Î¤Ç¡¢ getaddrinfo(3) ¤ÈµÕ¤ÎÆ°ºî¤ò¹Ô¤¦¡£ sa °ú¤­¿ô¤Ï¡¢ IP ¥¢¥É¥ì¥¹¤È¥Ý¡¼¥ÈÈÖ¹æ¤Î¾ðÊó¤òÊÝ»ý¤·¤Æ¤¤¤ë ÈÆÍÑŪ¤Ê¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¹½Â¤ÂÎ (sockaddr_in ·¿¤Þ¤¿¤Ï sockaddr_in6 ·¿) ¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤Ç¤¢¤ë¡£ salen ¤Ï sa ¤Î¥µ¥¤¥º¤Ç¤¢¤ë¡£ host ¤È serv °ú¤­¿ô¤Ï¡¢(¤½¤ì¤¾¤ì¥µ¥¤¥º¤¬ hostlen ¤È servlen ¤Î) ¥Ð¥Ã¥Õ¥¡¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤Ç¤¢¤ê¡¢ ¤³¤³¤Ë·ë²Ì¤ÎÃͤ¬³ÊǼ¤µ¤ì¤ë¡£

¥Û¥¹¥È̾¤¬ÉÔÍפǤ¢¤ë¤³¤È¤ò¤³¤Î´Ø¿ô¤ËÅÁ¤¨¤ë¤Ë¤Ï¡¢ host ¤Ë NULL ¤ò»ØÄꤹ¤ë¤«¡¢ hostlen ¤Ë 0 ¤ò»ØÄꤹ¤ë¡£Æ±Íͤˡ¢¥µ¡¼¥Ó¥¹Ì¾¤¬ÉÔÍפʾì¹ç¤Ï¡¢ serv ¤Ë NULL ¤ò»ØÄꤹ¤ë¤«¡¢ servlen ¤Ë 0 ¤ò»ØÄꤹ¤ë¡£ ¤·¤«¤·¡¢¥Û¥¹¥È̾¤È¥µ¡¼¥Ó¥¹Ì¾¤ÎξÊý¤òÉÔÍפÀ¤È»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤ (¤¤¤º¤ì¤«°ìÊý¤ÏÍ׵᤹¤ë¤³¤È)¡£

flags °ú¤­¿ô¤Ç getnameinfo(3) ¤ÎÆ°ºî¤òÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£»ØÄê¤Ç¤­¤ëÃͤϰʲ¼¤ÎÄ̤ê:

NI_NOFQDN
»ØÄꤹ¤ë¤È¡¢¥í¡¼¥«¥ë¤Ê¥Û¥¹¥È¤Ë¤Ï FQDN ¤Î¥Û¥¹¥È̾¤ÎÉôʬ¤Î¤ß¤òÊÖ¤¹¡£
NI_NUMERICHOST
»ØÄꤹ¤ë¤È¡¢¥Û¥¹¥È̾¤Î¿ôÃÍɽ¼°¤¬ÊÖ¤µ¤ì¤ë¡£ (»ØÄꤷ¤Ê¤¯¤Æ¤â¡¢¥Î¡¼¥É¤Î̾Á°¤¬°ú¤±¤Ê¤¤¾ì¹ç¤Ï¤³¤Î¤è¤¦¤Ë¤Ê¤ë¤³¤È¤Ï¤¢¤ë)¡£
NI_NAMEREQD
»ØÄꤹ¤ë¤È¡¢¥Û¥¹¥È̾¤¬°ú¤±¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¥¨¥é¡¼¤òÊÖ¤¹¡£
NI_NUMERICSERV
»ØÄꤹ¤ë¤È¡¢¥µ¡¼¥Ó¥¹Ì¾¤¬¿ôÃÍɽ¼° (Î㤨¤Ð¥Ý¡¼¥ÈÈÖ¹æ) ¤ÇÊÖ¤µ¤ì¤ë¡£
NI_DGRAM
»ØÄꤹ¤ë¤È¡¢¥¹¥È¥ê¡¼¥à¥Ù¡¼¥¹ (TCP) ¤Ç¤Ê¤¯¥Ç¡¼¥¿¥°¥é¥à¥Ù¡¼¥¹ (UDP) ¤Î¥µ¡¼¥Ó¥¹¤òÂоݤˤ¹¤ë¡£¿ô¤Ï¾¯¤Ê¤¤¤¬¡¢ UDP ¤È TCP ¤Ç°ã¤¦¥µ¡¼¥Ó¥¹¤òÄ󶡤·¤Æ¤¤¤ë¥Ý¡¼¥È (512-514) ¤ËÂФ·¤ÆɬÍפȤʤ롣

¹ñºÝ²½¥É¥á¥¤¥ó̾¤Î¤¿¤á¤Î getnameinfo() ¤Î³ÈÄ¥

glibc 2.3.4 ¤«¤é¡¢ getnameinfo() ¤Ë³ÈÄ¥¤¬¹Ô¤ï¤ì¡¢¥Û¥¹¥È̾¤È ¹ñºÝ²½¥É¥á¥¤¥ó̾ (Internationalized Domain Name; IDN) ·Á¼°¤È¤Î´Ö¤Ç Æ©²áŪ¤ÊÊÑ´¹¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë (IDN ·Á¼°¤Ë¤Ä¤¤¤Æ¤Ï RFC 3490 ¤Î Internationalizing Domain Names in Applications (IDNA) ¤ò»²¾È)¡£3¤Ä¤Î¥Õ¥é¥°¤¬¿·¤¿¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:

NI_IDN
¤³¤Î¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤È¡¢É¬ÍפǤ¢¤ì¤Ð¡¢¸¡º÷½èÍý¤Ç¸«¤Ä¤«¤Ã¤¿Ì¾Á°¤Ï IDN ·Á¼°¤«¤é¥í¥±¡¼¥ë¤Ë±þ¤¸¤¿Éä¹æ²½·Á¼°¤ËÊÑ´¹¤µ¤ì¤ë¡£ ASCII ʸ»ú¤À¤±¤Î̾Á°¤Ï¤³¤ÎÊÑ´¹¤Ç¤Ï±Æ¶Á¤ò¼õ¤±¤Ê¤¤¡£¤³¤Î¤¿¤á¡¢ ´û¸¤Î¥×¥í¥°¥é¥à¤ä´Ä¶­¤Ç¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£
NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES
¤³¤ì¤é¤Î¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¤È¡¢IDNA ½èÍý¤Ç»ÈÍѤµ¤ì¤ë¥Õ¥é¥° IDNA_ALLOW_UNASSIGNED (̤³ä¤êÅö¤Æ¤Î Unicode ¤Î¥³¡¼¥É¥Ý¥¤¥ó¥È¤òµöÍÆ) ¤È IDNA_USE_STD3_ASCII_RULES (½ÐÎϤ¬ STD3 ½àµò¤Î¥Û¥¹¥È̾¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë) ¤¬¤½¤ì¤¾¤ìÍ­¸ú¤Ë¤Ê¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤¹¤ë¤È 0 ¤¬Ê֤ꡢ(Í׵ᤵ¤ì¤Æ¤¤¤ì¤Ð) ¥Î¡¼¥É¤È¥µ¡¼¥Ó¥¹¤Î̾Á°¤¬ NULL ½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤Î·Á¼°¤Ç¤½¤ì¤¾¤ì¤Î»ØÄê¥Ð¥Ã¥Õ¥¡¤ËÊÖ¤µ¤ì¤ë (¥Ð¥Ã¥Õ¥¡¤ÎŤµ¤Ë¤¢¤¦¤è¤¦¤Ë½Ì¤á¤é¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤)¡£ ¥¨¥é¡¼¤Î¾ì¹ç¤Ï¡¢°Ê²¼¤Î 0 °Ê³°¤Î¥¨¥é¡¼¡¦¥³¡¼¥É¤¬ÊÖ¤µ¤ì¤ë:
EAI_AGAIN
»ØÄꤵ¤ì¤¿Ì¾Á°¤¬¸½»þÅÀ¤Ç¤Ï²ò·è¤Ç¤­¤Ê¤«¤Ã¤¿¡£ ¸å¤ÇºÆ»î¹Ô¤·¤Æ¤ß¤ë¤³¤È¡£
EAI_BADFLAGS
flags °ú¤­¿ô¤ËÉÔÀµ¤ÊÃͤ¬Í¿¤¨¤é¤ì¤¿¡£
EAI_FAIL
²óÉü¤Ç¤­¤Ê¤¤¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
EAI_FAMILY
»ØÄꤷ¤¿¥¢¥É¥ì¥¹¥Õ¥¡¥ß¥ê¡¼¤¬Ç§¼±¤Ç¤­¤Ê¤«¤Ã¤¿¡£ ¤¢¤ë¤¤¤Ï¥¢¥É¥ì¥¹¤ÎŤµ¤¬»ØÄꤵ¤ì¤¿¥Õ¥¡¥ß¥ê¡¼¤Ë¹ç¤¦¤â¤Î¤Ç¤Ê¤«¤Ã¤¿¡£
EAI_MEMORY
¥á¥â¥ê¤¬Â­¤ê¤Ê¤¤¡£
EAI_NONAME
Í¿¤¨¤é¤ì¤¿¥Ñ¥é¥á¡¼¥¿¤Ç¤Ï̾Á°¤¬²ò·è¤Ç¤­¤Ê¤¤¡£ NI_NAMEREQD ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤¿¤¬¥Û¥¹¥È̾¤¬·èÄê¤Ç¤­¤Ê¤«¤Ã¤¿¤«¡¢ ¥Û¥¹¥È̾¤â¥µ¡¼¥Ó¥¹Ì¾¤âÍ׵ᤵ¤ì¤Ê¤«¤Ã¤¿¡£
EAI_OVERFLOW
host ¤Þ¤¿¤Ï serv ¤¬»Ø¤·¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤¬¾®¤µ¤¹¤®¤¿¡£
EAI_SYSTEM
¥·¥¹¥Æ¥à¥¨¥é¡¼¤¬µ¯¤Ã¤¿¡£ ¥¨¥é¡¼¥³¡¼¥É¤Ï errno ¤ËÀßÄꤵ¤ì¤ë¡£

gai_strerror(3) ´Ø¿ô¤ò»È¤¦¤È¡¢¤³¤ì¤é¤Î¥¨¥é¡¼¡¦¥³¡¼¥É¤ò¡¢¥¨¥é¡¼¡¦¥ì¥Ý¡¼¥È¤ËŬ¤·¤¿ ¿Í´Ö¤¬Æɤߤ䤹¤¤Ê¸»úÎó¤ËËÝÌõ¤·¤Æ¤¯¤ì¤ë¡£

¥Õ¥¡¥¤¥ë

/etc/hosts
/etc/nsswitch.conf
/etc/resolv.conf

½àµò

RFC 2553, POSIX.1-2001.

Ãí°Õ

ŬÀڤʥХåե¡¥µ¥¤¥º¤òÁªÂò¤Ç¤­¤ë¤è¤¦¤Ë¡¢ <netdb.h> ¤Ë°Ê²¼¤ÎÄê¿ô¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£



# define NI_MAXHOST      1025

# define NI_MAXSERV      32

Á°¼Ô¤Ï¡¢ºÇ¶á¤Î¥Ð¡¼¥¸¥ç¥ó¤Î BIND ¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë <arpa/nameser.h> Ãæ¤ÎÄê¿ô MAXDNAME ¤ÈƱ¤¸ÃͤǤ¢¤ë¡£ ¸å¼Ô¤Ï¡¢³ä¤êÅö¤ÆºÑ¤Î¿ôÃͤˤĤ¤¤Æµ­¤·¤¿¸½ºß¤Î RFC ¤Ë Îóµó¤µ¤ì¤Æ¥µ¡¼¥Ó¥¹¤«¤é¿äÎ̤·¤¿ÃͤǤ¢¤ë¡£

Îã

°Ê²¼¤Î¥³¡¼¥É¤Ï¡¢»ØÄꤵ¤ì¤¿¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤ËÂФ¹¤ë ¥Û¥¹¥È¤È¥µ¡¼¥Ó¥¹¤Î¿ôÃÍɽ¼°¤ò¼èÆÀ¤·¤è¤¦¤È»î¤ß¤ë¡£ ÆÃÄê¤Î¥¢¥É¥ì¥¹¥Õ¥¡¥ß¥ê¡¼¤ËÂФ¹¤ë»²¾È¾ðÊó¤Ï °ìÀڥϡ¼¥É¥³¡¼¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ËÃåÌܤ·¤Æ¤Û¤·¤¤¡£

struct sockaddr *sa;    /* input */

char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];



if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), sbuf,

            sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)

    printf("host=%s, serv=%s\n", hbuf, sbuf);

°Ê²¼¤Ç¤Ï¥½¥±¥Ã¥È¥¢¥É¥ì¥¹¤Ë µÕ¸þ¤­¤Î¥¢¥É¥ì¥¹¥Þ¥Ã¥Ô¥ó¥°¤¬Â¸ºß¤¹¤ë¤«¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤ë¡£


struct sockaddr *sa;    /* input */

char hbuf[NI_MAXHOST];



if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf),

            NULL, 0, NI_NAMEREQD))

    printf("could not resolve hostname");

else

    printf("host=%s\n", hbuf);

getnameinfo() ¤ò»È¤Ã¤¿¥×¥í¥°¥é¥àÎ㤬 getaddrinfo(3) ¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡£

´ØÏ¢¹àÌÜ

getaddrinfo(3), gethostbyaddr(3), getservbyname(3), getservbyport(3), inet_ntop(3), socket(3), hosts(5), services(5), hostname(7), named(8)

R. Gilligan, S. Thomson, J. Bound and W. Stevens, Basic Socket Interface Extensions for IPv6, RFC 2553, March 1999.

Tatsuya Jinmei and Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses, internet draft, work in progress. ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt

Craig Metz, Protocol Independence Using the Sockets API, Proceedings of the freenix track: 2000 USENIX annual technical conference, June 2000. http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html