很简单的问题。是的,也许这并不重要,但我真的很好奇它们是什么意思,我找不到它们的含义。
// ipv4
struct sockaddr_in {
short int sin_family; // Address family, AF_INET
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
// ipv4
struct in_addr {
uint32_t s_addr; // that's a 32-bit int (4 bytes)
};
// ipv6
struct addrinfo {
int ai_flags; // AI_PASSIVE, AI_CANONNAME, etc.
int ai_family; // AF_INET, AF_INET6, AF_UNSPEC
int ai_socktype; // SOCK_STREAM, SOCK_DGRAM
int ai_protocol; // use 0 for "any"
size_t ai_addrlen; // size of ai_addr in bytes
struct sockaddr *ai_addr; // struct sockaddr_in or _in6
char *ai_canonname; // full canonical hostname
struct addrinfo *ai_next; // linked list, next node
};
// ipv6
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
发布于 2011-11-18 18:25:44
sin_
表示sockaddr_in
,ai_
表示addrinfo
,sa_
表示sockaddr
。我不确定in_addr
中的s_
。套接字API的设计考虑到了20世纪80年代早期的准标准C编译器,它可能对所有struct
成员都有一个名称空间。
发布于 2016-06-17 07:46:44
in_addr
的Microsoft definition可能暗示"S_
“前缀的意思是struct
,正如@R..的答案,看到"un
”代表union
,但是他们使用大写的"S
“,而不像POSIX land。
typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
对于套接字结构集,"s
“通常表示"sock”,缩写为" socket ",因此似乎没有定义原因。
出于好奇,IPv6 Support上的MSDN页面显示了包含名称s6_addr
的struct in6_addr
,这意味着IPv6版本的IPv4“套接字”结构,而不仅仅是"IPv4结构“。
https://stackoverflow.com/questions/8180882
复制相似问题