以posix方式绑定到特定NIC

时间:2010-11-24 07:23:14

标签: c++ c network-programming

我的机器上有3个网络接口(eth0-2),每个网络接口都有自己的网络子网192.168.10。,192.168.20。,192.168.30。。我想知道如何使用BSD套接字侦听特定NIC的端口,例如,在端口10000上监听eth1(192.168.20。),目前我已经看到列出/绑定仅限eth0。我目前使用的操作系统是Ubuntu,但我希望该解决方案可以在任何posix系统上工作/移植。

另一方面,我正在用C ++开发我的应用程序,并希望对C ++中的网络库有一些指导,我已经看过Qt但是许可证不适合我正在进行的开发类型

2 个答案:

答案 0 :(得分:2)

bind()系统调用允许您指定将套接字绑定到的地址。您可以绑定到特定地址,也可以绑定到INADDR_ANY,它将侦听所有传入地址,而不管接口如何。

至于网络库,boost :: asio很好。当然,您可能希望指定比“网络库”更多的要求以获得更好的推荐。

答案 1 :(得分:0)

如果您 BIND 一个侦听套接字到主机上的所有IP(例如,在端口10000上),我不相信有一个通用的机制来确定一个IP地址特别是 ACCEPT -ed连接。

一种解决方案是 BIND 一个单独的套接字连接到每个3个IP地址,然后使用 SELECT 来监视传入连接。这样,您将始终知道使用了哪个传入IP地址。

作为替代方案,如果您可以完全控制客户端协议,则可以在要求中设计客户端传输在建立套接字连接后立即使用的目标IP。这将允许您使用单个服务器套接字来侦听所有传入连接,但需要您信任客户端提供的信息。