gpt4 book ai didi

c++ - 如何在 C++ 中确定 Linux 套接字绑定(bind)到哪些接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:44:47 24 4
gpt4 key购买 nike

一段时间以来,我一直在努力解决这个问题。给定一个 Linux 套接字,我如何才能

  1. 判断是否绑定(bind)?
  2. 如果已绑定(bind),请确定它绑定(bind)到多宿主系统上的哪个网络接口(interface)子集?

简而言之,我有一台机器有多个网卡和一个只绑定(bind)到这些网卡的一个子集的套接字。我想在这些接口(interface)被绑定(bind)到我们库中的其他地方后以编程方式检测并记录这些接口(interface),这意味着我在绑定(bind)时无法访问此信息。

我还应该指出,我需要一个与 SCTP 套接字兼容的 IPV4/6 兼容解决方案(尽管我现在可以使用 UDP 或 TCP 解决方案)

最佳答案

getsockname函数返回套接字名称,即本地套接字地址。只需为未绑定(bind)和绑定(bind)套接字调用此函数即可确定您的套接字实现行为。

编辑:当您有一个 AF_INET(即 IPv4)套接字时,成员 sin_addr.S_un.S_addr 与您传递给 SOCKADDR_IN 结构中的相应成员相同>绑定(bind)函数。因此,如果您已绑定(bind)到 INADDR_ANY,则当套接字未绑定(bind)到特定网络适配器时,您将获得 INADDR_ANY

我用我的操作系统 (Windows 7) 的套接字实现检查了这一点。如果您的实现返回其他内容,您可能会遇到由其他地方的错误引起的未定义行为。当然,如果您有源代码,您可以验证网络堆栈的实现。

不支持绑定(bind)到网络适配器的子集。您只能绑定(bind)到一个或所有。

关于c++ - 如何在 C++ 中确定 Linux 套接字绑定(bind)到哪些接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19261164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com