sockaddr结构 – (sys / socket.h)
我整天都在读sys / socket.h ,最后开始理解它,现在开始使用它,但是,我不知道为什么我不能为sockaddr
结构的sa_family
成员赋值。
规格sockaddr
结构:
struct sockaddr{ sa_family_t sa_family address family char sa_data[] socket address (variable-length data) };
数据类型: sa_family_t
– 无符号整数类型(2-4个字节)
价值观:
Name Purpose Man page AF_UNIX, AF_LOCAL Local communication unix(7) AF_INET IPv4 Internet protocols ip(7) AF_INET6 IPv6 Internet protocols ipv6(7) AF_IPX IPX - Novell protocols AF_NETLINK Kernel user interface device netlink(7) AF_X25 ITU-T X.25 / ISO-8208 protocol x25(7) AF_AX25 Amateur radio AX.25 protocol AF_ATMPVC Access to raw ATM PVCs AF_APPLETALK AppleTalk ddp(7) AF_PACKET Low level packet interface packet(7) AF_ALG Interface to kernel crypto API
这有点令人困惑,因为这些值是char
数据类型而不是unsigned int
。
简单测试:
#include #include int main(void){ struct sockaddr_in address; address.sin_family = AF_INET; printf("Socket Address Family: %s\n", address.sin_family); return 0; }
错误:
storage size of 'address' isn't known
它应该打印出Socket Address Family: AF_INET
…我在这里缺少什么?
这是因为您没有包含该结构的定义。 结构sockaddr_in
在
定义。 有关更多详细信息,请参阅: sockaddr_in未声明的标识符