如何确定 Linux 套接字在C++中绑定到哪些接口
How to determine which interfaces a Linux socket is bound to in C++
我一直在试图解决这个问题。给定一个 Linux 套接字,我该如何
- 确定它是否已绑定?
- 如果已绑定,请确定它在多宿主系统上绑定到哪个网络接口子集?
简而言之,我有一台带有多个网卡的机器和一个仅绑定到这些卡子集的插槽。我想以编程方式检测并记录这些接口,因为它们在我们的库中被绑定,这意味着我在绑定时无法访问这种规范。
我还应该指出,我需要一个IPV4/6兼容的解决方案,最好与SCTP套接字配合使用(尽管我现在可以使用UDP或TCP解决方案)
getsockname 函数返回套接字名称,即本地套接字地址。只需为未绑定套接字和绑定套接字调用此函数即可确定套接字实现行为。
编辑:当您有一个AF_INET(即 IPv4)套接字时,成员sin_addr.S_un.S_addr
与您传递给 bind
函数的 SOCKADDR_IN
结构中的相应成员相同。因此,如果您已绑定到INADDR_ANY
则当套接字未绑定到特定网络适配器时,您会INADDR_ANY
。
我用我的操作系统(Windows 7)的套接字实现检查了这一点。如果您的实现返回其他内容,则可能会遇到由其他地方的错误引起的未定义行为。当然,如果您有可用的源代码,则可以验证网络堆栈的实现。
不支持绑定到网络适配器的子集。只能绑定到一个或全部。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 如何绑定 C++ gRPC 客户端的网络接口
- 使用 Boost.Asio 将 UDP 套接字绑定到特定网络接口
- 网络:当接口打开/关闭时,在所有接口上绑定套接字
- 如何在多个接口上绑定到同一 UDP 端口
- 将套接字绑定到具有未知 IP 的特定接口
- 如何确定 Linux 套接字在C++中绑定到哪些接口
- 错误:(E112) 获取接口失败:端口未绑定 - SystemC
- 如何绑定boost udp套接字到特定的接口
- 对VB6接口方法的后期绑定调用