C语言中的sockaddr结构体用于表示一个通用的网络地址,其定义如下:
struct sockaddr { unsigned short sa_family; // 地址族(AF_xxx) char sa_data[14]; // 14字节的协议地址 };
sockaddr结构体主要用于在网络编程中定义和操作不同类型的网络地址。
常见的sockaddr结构体及其用法如下:
- struct sockaddr_in: 用于IPv4地址的表示,定义如下:
struct sockaddr_in { short int sin_family; // 地址族(AF_INET) unsigned short int sin_port; // 端口号 struct in_addr sin_addr; // IPv4地址 unsigned char sin_zero[8]; // 未使用 };
- struct sockaddr_in6: 用于IPv6地址的表示,定义如下:
struct sockaddr_in6 { unsigned short int sin6_family; // 地址族(AF_INET6) __uint32_t sin6_flowinfo; // 流信息 struct in6_addr sin6_addr; // IPv6地址 __uint32_t sin6_scope_id; // 作用域标识 };
- struct sockaddr_un: 用于Unix域套接字的表示,定义如下:
struct sockaddr_un { sa_family_t sun_family; // 地址族(AF_UNIX) char sun_path[108]; // 套接字路径名 };
- struct sockaddr_storage: 用于保存任意类型的网络地址,大小足够容纳最大的地址结构体。
以上是常见的几种sockaddr结构体的使用方法,具体使用哪种结构体取决于所使用的网络协议和地址类型。