套接字地址结构
#include <netinet/in.h>
在IPv4网域(AF_INET)中套接字地址结构用sockaddr_in表示;
在IPv6网域(AF_INET6)中套接字地址结构用sockaddr_in6表示;
通用套接字地址结构,为支持任意协议族传入套接字函数,都被强制转换成通用套接字地址结构;
第一代:struct sockaddr、第二代:struct sockaddr_storage、
套接字地址结构的传递
从进程到内核:结构指针、结构大小(标识结构大小的整数)
从内核到进程:结构指针、结构大小的指针(整数的指针)
主机字节序、网络字节序互相转换:
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostint32); //返回以网络字节序表示的32位整型数
uint16_t htons(uint16_t hostint16); //返回以网络字节序表示的16位整型数
uint32_t ntohl(uint32_t netint32); //返回以主机字节序表示的32位整型数
uint16_t ntohs(uint16_t netint16); //返回以主机字节序表示的16位整型数
地址值与表达的相互转换
#include <arpa/inet.h>
domain域仅支持AF_INET、AF_INET6
地址长度宏定义:INET_ADDRSTRLEN/INET6_ADDRSTRLEN
const char* inet_ntop(int domain, const void* addr,char* str,size_t len);
//若成功返回IP地址字符串指针,若出错返回NULL
int inet_pton(int domain,const char* restrict str, void* restrict addr);
//若成功返回1,若格式无效返回0,若出错返回-1