一. socket编程函数
1.1 基本函数
socket、bind、listen、connect、read/send、write/recv、close函数。
1.2 信息获取函数
1)支持ipv6和ipv4
getpeername
getsockname
getaddrinfo
2)只支持ipv4
gethostbyaddr
gethostbyname
1.3 信息转换函数
1)支持ipv6和ipv4
inet_ntop
inet_pton
端口结构转换:
htons
ntohs
2)只支持ipv4
inet_aton
inet_ntoa
1.4 信息设置函数
getsockopt
setsockopt
二. ipv6库封装
2.1
三. ipv4、ipv6信息存储结构体
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
struct sockaddr_in {
short int sin_family; /* Address family AF_INET */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
struct in_addr {
unsigned long s_addr; /* Internet address */
};
struct sockaddr_in6 {
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port; /* transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 traffic class & flow info */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* set of interfaces for a scope */
};
struct in6_addr {
uint8_t s6_addr[16]; /* IPv6 address */
};
struct addrinfo{
int ai_flags; /* AI_PASSIVE,AI_CANONNAME,AI_NUMERICHOST */
int ai_family; /* AF_INET,AF_INET6 */
int ai_socktype; /* SOCK_STREAM,SOCK_DGRAM */
int ai_protocol; /* IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 */
size_t ai_addrlen; /* Length */
char *ai_cannoname; /* */
struct sockaddr *ai_addr; /* struct sockaddr */
struct addrinfo *ai_next; /* pNext */
}
相关资源链接
1.对gethostbyname函数的分析:
http://blog.chinaunix.net/uid-21411227-id-1826871.html
http://wenku.baidu.com/link?url=K0DMifycOIjsM7IBu7zxOlHhJkoi055WFqOTDbOXnme2YDAjYBaH3YGBdqS8E8uEhMqIKiejqrgZ3Jkc9Hrk3xIEYa0pU0GzV1Vjusl9H7u