struct sockaddr_in address;
...
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
memset(address.sin_zero, '\0', sizeof address.sin_zero);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0)
{
perror("In bind");
exit(EXIT_FAILURE);
}
这个示例代码运行良好,尽管我不理解两个结构体之间的某种传输方式。
<netinet/in.h>
中struct sockaddr_in
的定义如下:
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];
};
在
<sys/socket.h>
中,struct sockaddr
的定义如下:struct sockaddr {
__uint8_t sa_len; /* total length */
sa_family_t sa_family; /* [XSI] address family */
char sa_data[14]; /* [XSI] addr value (actually larger) */
};
它们有不同的结构,"传输/转换"是如何工作的呢?
void *
类型作为通用指针的时候创建的。 - Gerhardhstruct sockaddr_in
,struct sockaddr
还是其他什么? - JJJohn