我已经阅读了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<stdio.h>
#include<sys/socket.h>
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...这里我漏掉了什么?
发布于 2015-09-16 06:26:41
这是因为您没有包含该结构的定义。在<netinet/in.h>中定义了结构sockaddr_in。有关更多详细信息,请参阅:sockaddr_in undeclared identifier
https://stackoverflow.com/questions/32596553
复制相似问题