作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
一段时间以来,我一直在努力解决这个问题。给定一个 Linux 套接字,我如何才能
简而言之,我有一台机器有多个网卡和一个只绑定(bind)到这些网卡的一个子集的套接字。我想在这些接口(interface)被绑定(bind)到我们库中的其他地方后以编程方式检测并记录这些接口(interface),这意味着我在绑定(bind)时无法访问此信息。
我还应该指出,我需要一个与 SCTP 套接字兼容的 IPV4/6 兼容解决方案(尽管我现在可以使用 UDP 或 TCP 解决方案)
最佳答案
getsockname函数返回套接字名称,即本地套接字地址。只需为未绑定(bind)和绑定(bind)套接字调用此函数即可确定您的套接字实现行为。
编辑:当您有一个 AF_INET(即 IPv4)套接字时,成员 sin_addr.S_un.S_addr
与您传递给 的
函数。因此,如果您已绑定(bind)到 SOCKADDR_IN
结构中的相应成员相同>绑定(bind)INADDR_ANY
,则当套接字未绑定(bind)到特定网络适配器时,您将获得 INADDR_ANY
。
我用我的操作系统 (Windows 7) 的套接字实现检查了这一点。如果您的实现返回其他内容,您可能会遇到由其他地方的错误引起的未定义行为。当然,如果您有源代码,您可以验证网络堆栈的实现。
不支持绑定(bind)到网络适配器的子集。您只能绑定(bind)到一个或所有。
关于c++ - 如何在 C++ 中确定 Linux 套接字绑定(bind)到哪些接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19261164/
我是一名优秀的程序员,十分优秀!