socket 基本API
地址结构
ipv4地址结构
<netinet/in.h>
struct in_addr{
in_addr_t s_addr;
}
struct sockaddr_in{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
ipv6 地址结构
<netinet/in.h>
struct in6_addr
{
uint8_t __u6_addr8[16];
};
struct sockaddr_in6
{
__SOCKADDR_COMMON (sin6_);
in_port_t sin6_port; /* Transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* IPv6 scope-id */
};
通用地址结构
struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
char sa_data[14]; /* Address data. */
};
内存控制函数
第一类
<strings.h>
void bzero(void *dest,size_t nbytes);
void bcopy(const void *src,void *dest,size_t nbytes);
int bcmp(const void *ptr1,const void ptr2,size_t nbytes);
第二类
<string.h>
void *memset(void dest,int c,size_t bytes);
void *memcpy(void *dest,const void *src,size_t nbytes);
int memcmp(const void *ptr,const void *ptr2,size_t nbytes);
ipv4点分十进制与网络二进制转换
第一类
<arpa/inet.h>
int inet_aton(const char* strptr,struct in_addr * addrptr);
in_addr_t inet_addr(const char*strptr);
char *inet_ntoa(struct in_addr inaddr);
只可用于ipv4
第二类
<arpa/inet.h>
int inet_pton(int family,const char *strptr,void *addrptr);
const char * inet_ntop(int family,const void *addrptr,char *strptr,size_t len);
主机序转网络序
<netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);