【发布时间】:2012-11-11 13:38:09
【问题描述】:
我想为 Linux Socket API 编写一个 C++ 包装器。在 socket() ctor 中,请求地址族 (AF)。我不想再次在 connect() 签名中要求 AF,因为它已经在套接字的构造函数中给出。那么如何从现有套接字中获取 AF?
【问题讨论】:
-
还记得包装器成员变量中的地址族吗?
标签: c++ c linux network-programming
我想为 Linux Socket API 编写一个 C++ 包装器。在 socket() ctor 中,请求地址族 (AF)。我不想再次在 connect() 签名中要求 AF,因为它已经在套接字的构造函数中给出。那么如何从现有套接字中获取 AF?
【问题讨论】:
标签: c++ c linux network-programming
POSIX 标准的 getsockname 会有所帮助:
int getsockname(int socket, struct sockaddr *restrict address,
socklen_t *restrict address_len);
它将填写给定的 struct sockaddr(成功后):
struct sockaddr {
unsigned short sa_family; // <- that's what you looking for
char sa_data[14];
}
【讨论】:
该死的。找了半个小时左右。现在发布这个问题后,我立即找到了答案。
getsockopt([...]) 带有选项 SO_DOMAIN(请参阅socket options)
【讨论】: