【发布时间】:2014-06-17 13:04:18
【问题描述】:
据我了解,struct addrinfo 用于准备套接字地址结构,而 struct sockaddr 包含套接字地址信息。但这实际上意味着什么? struct addrinfo 包含一个指向 struct sockaddr 的指针。为什么要把它们分开?为什么我们不能将 sockaddr 中的所有内容合并到 addr_info 中?
我只是在这里猜测,但它们分离的原因是为了在传递结构时节省空间吗?例如在 bind() 调用中,它只需要端口号和互联网地址。所以这两个都被分组在一个 struct sockaddr 中。那么,我们可以只传递这个小结构体而不是更大的结构体 addrinfo 吗?
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
};
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
【问题讨论】:
标签: c sockets networking