//////////////////////////////////////lb
IPV4:
//struct sockaddr_in {
// __uint8_t sin_len;
// sa_family_t sin_family;//iPv4地址族
// in_port_t sin_port; //端口号
// struct in_addr sin_addr;//IPV4 address
// char sin_zero[8];
//};
////////////////////////////////////lb
IPV6:
// struct sockaddr_in6 {
// __uint8_t sin6_len; /* length of this struct(sa_family_t) */
// sa_family_t sin6_family;/* AF_INET6 (sa_family_t) */
// in_port_t sin6_port; /* Transport layer port # (in_port_t) */
// __uint32_t sin6_flowinfo;/* IP6 flow information */
// struct in6_addr sin6_addr;/* IP6 address */
// __uint32_t sin6_scope_id;/* scope zone index */
// };
////////////////////////////////////lb
getAddrInfo中的参数:
// struct addrinfo {
// int ai_flags;/* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
// int ai_family;/* PF_xxx */地址族,
// int ai_socktype;/* SOCK_xxx */套接字类型
// int ai_protocol;/* 0 or IPPROTO_xxx for IPv4 and IPv6 */协议类型
// socklen_t ai_addrlen; /* length of ai_addr */指向缓冲区的字节数
// char *ai_canonname;/* canonical name for hostname */主机的规范化名称
// struct sockaddr *ai_addr;/* binary address */指向sockaddr结构的指针。getaddrinfo返回的每个addrinfo结构内的ai_addr都指向一个filled-in套接字地址结构。
// struct addrinfo *ai_next;/* next structure in linked list */指向链表中下一个addrinfo结构的指针,如果是链表的最后一个addrinfo结构,则ai_next为NULL。
// };
////////////////////////////////lb
转换IPV4和IPV6:
int getaddrinfo(
const char* nodename,//传的是主机地址的字符串;
const char* servname,
const struct addrinfo* hints,
struct addrinfo** res
);
* nodename:节点名可以是主机名,也可以是数字地址。(IPV4的10进点分,或是IPV6的16进制)
* servname:包含十进制数的端口号或服务名如(ftp,http)
* hints:是一个空指针或指向一个addrinfo结构的指针,由调用者填写关于它所想返回的信息类型的线索。
* res:存放返回addrinfo结构链表的指针,指向由一个或多个addrinfo结构体组成的链表,包含了主机的响应信息
* 返回值:成功返回0,失败返回非零的 sockets error code
*/
////////////////////////////////lb