sockaddr_in是一个结构体,用于表示Internet地址和端口号。它定义在头文件<netinet/in.h>中,通常与套接字(socket)API一起使用。
sockaddr_in结构体包含以下字段:
sin_family:地址族,通常设置为AF_INET表示IPv4协议。
sin_port:端口号,以网络字节序表示。
sin_addr:IP地址,以网络字节序表示。
sin_zero:填充字段,通常设置为0。
使用sockaddr_in结构体时,需要将其类型转换为sockaddr类型,因为套接字API中的大多数函数都需要传入sockaddr类型的指针作为参数。可以使用强制类型转换将sockaddr_in类型转换为sockaddr类型,例如:
struct sockaddr_inaddr;// 设置addr的字段值
...
// 将addr转换为sockaddr类型
struct sockaddr* sa = (struct sockaddr*)&addr;
在使用套接字API创建、绑定、连接等操作时,需要将sockaddr_in类型的指针作为参数传递给相关函数。例如,使用bind()函数将套接字绑定到一个特定的IP地址和端口号:
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字structsockaddr_inaddr;// 设置addr的字段值
...
if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}