从socket获取地址族.Linux的

Man*_*d3r 4 c c++ linux network-programming

我想为Linux Socket API编写一个C++包装器.在socket()ctor中请求地址族(AF).我不想再次在connect()签名中要求AF,因为它已经在socket的构造函数中给出了.那么如何从现有插座中获取AF?

Man*_*d3r 7

该死的.搜索了大约半个小时.在发布这个问题后,我立即找到了答案.

带有选项SO_DOMAIN的getsockopt([...])(参见套接字选项)

  • 但要小心这个选项,因为它似乎是特定于Linux的.如果您正在编写包装类,那么您只需将类型保存为成员变量吗? (3认同)

Ale*_* I. 5

POSIX标准的getsockname将有助于:

int getsockname(int socket, struct sockaddr *restrict address,
       socklen_t *restrict address_len);
Run Code Online (Sandbox Code Playgroud)

它将填充给定的struct sockaddr(成功时):

struct sockaddr {
    unsigned short    sa_family;  // <- that's what you looking for
    char              sa_data[14];  
}
Run Code Online (Sandbox Code Playgroud)