socket编程中getaddrinfo与getnameinfo

【版权申明】转载请附上出处链接 

socket编程中getaddrinfo与getnameinfo

$man getaddrinfo

NAME
       getaddrinfo, freeaddrinfo, gai_strerror - network address and service translation

SYNOPSIS
       #include <sys/types.h>
       #include <sys/socket.h>
       #include <netdb.h>

       int getaddrinfo(const char *node, const char *service,
                       const struct addrinfo *hints,
                       struct addrinfo **res);

       void freeaddrinfo(struct addrinfo *res);

       const char *gai_strerror(int errcode);


The addrinfo structure used by getaddrinfo() contains the following fields:
struct addrinfo {
               int              ai_flags;
               int              ai_family;
               int              ai_socktype;
               int              ai_protocol;
               socklen_t        ai_addrlen;
               struct sockaddr *ai_addr;
               char            *ai_canonname;
               struct addrinfo *ai_next;
           };

getaddrinfo

给定标识远程主机的ip地址(即node)与端口(即service),getaddrinfo()返回一个或多个addrinfo结构体,每个结构都包含一个Internet地址,可以在对bind()或connect()的调用中指定。

需要注意的是:getaddrinfo()函数将geth-ostbyname()和getservbyname()函数提供的功能组合到单个接口中,但与后两个函数不同的是,getaddrinfo()是可重入的,允许程序消除IPv4对IPv6的依赖。

/**
 * @param node,IP地址
 * @param service,端口
 * @param hints,保存了socket的类型以及地址族
 * 
 * @return 返回一个或多个addrinfo结构体
 */
int getaddrinfo(const char *node, const char *service,
                       const struct addrinfo *hints,
                       struct addrinfo **res);

$man getnameinfo

NAME
       getnameinfo - address-to-name translation in protocol-independent manner

SYNOPSIS
       #include <sys/socket.h>
       #include <netdb.h>

		/**
		 * @param addr,输入参数。struct addrinfo中的struct sockaddr
		 * @param addrlen,输入参数。struct addrinfo中的socklen_t 
		 * @param host,输出参数。IP地址
		 * @param hostlen,输入参数。告诉函数host的大小
		 * @param serv,输出参数。端口号
		 * @param servlen,输入参数。告诉函数servlen的大小
		 * @param flags,输入参数。告诉函数struct sockaddr的处理方式
		 * 
		 * @return 返回零则成功。
		 */
       int getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
                       char *host, socklen_t hostlen,
                       char *serv, socklen_t servlen, int flags);

getnameinfo()函数与getaddrinfo()相反:它以独立于协议的方式将套接字地址转换为相应的主机和服务。
它结合了gethostbyaddr()和getservbyport()的功能,但与这些函数不同的是,getnameinfo()是可重入的,允许编程消除IPv4对IPv6的依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安河桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值