ip6编程
1,使用 getaddrinfo 来 bind 或 connect
bind 和 connect 有了一种新方式,通过 getaddrinfo 返回适合 bind 和 connect 的地址,然后,通过遍历列表,直到 bind 或 connect 成功,结束遍历(参见 getaddrinfo说明中的例子)。 getaddrinfo 可以返回 ip4 和 ip6 地址。 这样避免了直接通过构造 sockaddr_in 或 sockaddr_in6 并与 sockaddr强制转换,也不用关心 ip 类型了。 struct addrinfo hints; struct addrinfo *result = NULL,*rp = NULL; memset(&hints,sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ hints.ai_socktype = SOCK_STREAM; /* Datagram socket */ hints.ai_flags = AI_ADDRCONFIG; //hints.ai_protocol = 0; /* Any protocol */ hints.ai_protocol = IPPROTO_TCP; hints.ai_canonname = NULL; hints.ai_addr = NULL; hints.ai_next = NULL;
当第一个参数不为NULL时,忽略AI_PASSIVE 总结: 2,通过 addrinfo 获取 host 及 port char host[NI_MAXHOST] = {0}; char port[NI_MAXSERV] = {0}; getnameinfo(hints.ai_addr,NI_MAXHOST,host,port,NI_MAXSERV,NI_NUMERICHOST|NI_NUMERICSERV); 3,ip4 和 ip6 的公共储存结构体 sockaddr_storage获取 ip 地址信息时,可以先定义个 这种类型的变量储存,支持 ip4 和 ip6,再通过 getnameinfo 来获取 host 和 port (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |