文档介绍:IPv6进阶
目录A-IPv6编程
-协议栈
协议栈框架
IPv4/IPv6框架-Socket
Socket参数
IPv4
IPv6
AF_INET
AF_INET6
PF_INET
PF_INET6
IN_ADDR_ANY
Inaddr_any6
IPv4/IPv6框架-数据结构
数据结构
IPv4
IPv6
Sock_addr
Sockaddr_storage
In_addr
In6_addr
Sockaddr_in
Sockaddr_in6
hostent
addinfo
Sin_len
Sin6_len
Sin_family
Sin6_family
Sin_port
Sin6_port
Sin_addr
Sin6_addr
S_addr
S6_addr
IPv4/IPv6框架-解析函数
解析函数
IPv4
IPv6
名字到地址
Inet_aton
Inet_addr
Inet_pton
Inet_ntoa
Inet_ntop
地址解析
Gethostbyname
gethostbyaddr
Getipnodebyname
Getipnodebyaddr
Getnameinfo
getaddrinfo
名字到索引
unsigned int if_nametoindex(const char *ifname)
索引到名字
char *if_indextoname(unsigned int ifindex, char *ifname)
查询所有接口和名字
struct if_nameindex *if_nameindex(void)
释放内存
void if_freenameindex(struct if_nameindex *ptr);
IPV6_FLOWINFO
IPV6_UNICAST_HOPS
多播控制
IPV6_MULTICAST_IF
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_LOOP
IPV6_ADD_MEMBERSHIP
IPV6_DROP_MEMBERSHIP
IPV6_MTU
IPV6_V6ONLY
……
名字到地址
struct hostent *getipnodebyname(const char *name, int af, int flags int *error_num);
地址到名字
struct hostent *getipnodebyaddr(const void *src, size_t len, int af, int *error_num);
内存释放
void freehostent(struct hostent *ptr)
协议无关的节点名称和业务名称转换
int getaddrinfo(const char *nodename, const char *servname,
const struct addrinfo *hints,
struct addrinfo **res);
void freeaddrinfo(struct addrinfo *ai);
char *gai_strerror(int ecode);
Socket地址结构到节点名称和业务名称转换
int getnameinfo(const struct sockaddr *sa, socklen_t salen,
char *host, size_t hostlen,
char *serv, size_t servlen,
int flags);
IPv4
inet_addr() / inet_ntoa()
IPv4/IPv6兼容
int inet_pton(int af, const char *src, void *dst);
const char *inet_ntop(int af, const void *src,
char *dst, size_t size);