【问题标题】:Get address family from socket. Linux从套接字获取地址族。 Linux
【发布时间】:2012-11-11 13:38:09
【问题描述】:

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

【问题讨论】:

  • 还记得包装器成员变量中的地址族吗?

标签: c++ c linux network-programming


【解决方案1】:

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];  
}

【讨论】:

  • 在 Linux 上显然是 doesn't work
  • @OlegAndriyanov getsockname() 工作得很好,如果使用得当。只需确保先绑定套接字即可。
【解决方案2】:

该死的。找了半个小时左右。现在发布这个问题后,我立即找到了答案。

getsockopt([...]) 带有选项 SO_DOMAIN(请参阅socket options

【讨论】:

  • 请谨慎使用此选项,因为它似乎是特定于 Linux 的。如果您正在编写一个包装类,您不能简单地将类型保存为成员变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多