error getaddrinfo,python getaddrinfo

  error getaddrinfo,python getaddrinfo

  目录1、getaddrinfo函数原型2、addrinfo结构1、相关结构3、getaddrinfo函数错误示例汇总

  Getaddrinfo函数是域名到ip解析的常用函数,可以解析ipv6和ipv4。

  首先,getaddrinfo函数的prototype参数需要提供主机名和/或服务名。如果只提供名字,另一个必须是空指针。主机名可以是点分十进制或节点名格式的主机地址。

  int getaddrinfo(const char *node,const char *service,const struct addrinfo *hints,struct addrinfo * * RES);参数描述

  节点:主机名或地址字符串(IPv4的点分十进制字符串或IPv6的十六进制字符串)

  服务:服务名可以是十进制端口号,也可以是定义好的服务名,如ftp、http等。

  提示:它可以是一个空指针,也可以是一个指向addrinfo结构的指针,在addrinfo结构中,调用者填写关于预期返回的信息类型的提示。例如,如果指定的服务同时支持TCP和UDP,调用方可以将提示结构中的ai_socktype成员设置为SOCK_DGRAM,以便只返回适用于数据报windows套接字的信息。

  结果:这个函数通过结果指针参数返回一个指向addrinfo结构链表的指针。

  返回值:03354成功,而不是03354错误。

  二。addrinfo结构struct addrinfo { int ai _ flagsint ai _ familyint ai _ socktypeint ai _ protocolsocklen _ t ai _ addrlenstruct sockaddr * ai _ addrchar * ai _ canonnamestruct addrinfo * ai _ next};当使用这个结构时,所有的内存字段都应该设置为0,所有的指针都指向NULL,然后每个值都应该赋值。

  Ai_addrlen:指向的缓冲区的长度(以字节为单位)。

  Ai_canonname:主机的规范名称。

  Ai_addr:指向sockaddr结构的指针。每个返回的addrinfo结构中的ai_addr成员指向一个填充的套接字地址结构。

  每个返回的addrinfo结构的长度(以字节为单位)在ai_addrlen成员中指定。

  1.相关结构struct sockaddr { ushort sa _ family;char sa _ data[14];};struct sockaddr _ in { short sin _ family;//指协议族,在socket编程中只能是AF _ INETu _ short sin _ port//存储端口号(使用网络字节顺序)struct in _ addr sin _ addr//存储IP地址,使用in_addr char sin_zero[8]的数据结构;//保留空字节,以保持两个数据结构sockaddr和sockaddr _的大小相同。};三。getaddrinfo函数出错。getaddrinfo中的错误不能用perror或strerror返回,但调用gai_strerror返回的错误代码需要转换成错误信息。

  const char * Gai _ strerror(int errcode);

  返回值是指向错误字符串的指针。

  实例www.biadu.com使用以下代码解析域名(示例):

  #包含stdio。h #包含stdlib。h #包括netdb。h #包含系统/插座。h #包含字符串。h #包含错误。h #包含网络/输入。h包括arpa/inet。hint main(int argc,char * * argv){ int RV;结构地址信息提示;struct addr info * ai _ list=null struct sockaddr _ in * sinchar * domain _ name= www。百度一下。com’;char * result _ IP= 192。168 .0 .1 ;memset(hints,0,sizeof(hints));hints . ai _ family=AF _ inethints . ai _ SOCK type=SOCK _ STREAMrv=getaddrinfo(domain _ name,NULL,hints,ai _ list);如果(rv!=0){ printf( ERROR \ n );//printf(Error : %S \n ,Gai _ strerror(Error));return-1;} sin=(struct sockaddr _ in *)ai _ list-ai _ addr;result _ IP=inet _ ntoa(sin-sin _ addr);printf(%s域:%s \n ,域名,结果IP);返回0;} 总结加深了对addrinfo,sockadd_in,和套接字地址结构体的理解,以及他们互相之间的转换:inet_ntoa(),inet_aton()。文章参考: 《UNIX环境高级编程第三版》

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: