【问题标题】:How to bind a socket to multiple interfaces如何将套接字绑定到多个接口
【发布时间】:2013-06-17 21:47:38
【问题描述】:

在互联网上搜索了几个小时后,我仍然无法找到我的问题的答案。

我的任务是创建一个服务器,它接受来自可变数量接口的套接字(在配置文件中以eth0, eth1, etc. 给出)。

最简单的方法是什么? 有没有办法将一个套接字绑定到多个接口?我还没有找到这样做的方法。
或者,我是否必须使用INADDR_ANY 并以某种方式找出发送数据包的接口?

还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: sockets interface bind


    【解决方案1】:

    您要么将bind(2) 一个 套接字与INADDR_ANY 连接到所有 接口,要么创建多个套接字 并将每个套接字绑定到所需接口的 IP 地址。在任何情况下,请在套接字上设置SO_REUSEADDR 选项。

    【讨论】:

    • @NikolaiNFetissov 当我使用 INADDR_ANY 时我是否能够接受超过 65K 的连接限制,或者我必须为此分别绑定每个 IP?
    • @Tolga,您可能指的是 TCP 端口号是 16 位整数这一事实。这不是一个限制因素,因为每个给定的 TCP 连接都是一个 4 元组(src addr, src port, dest addr, dest port)。在达到 65536 个连接之前,您更有可能在服务器上达到每个进程的文件描述符限制。
    • @NikolaiFetissov 感谢您的明确答复。据推测,使用多个套接字的第二种选择涉及更多的编程工作,因为我们需要侦听和检查多个套接字上的连接(也许在 C 中使用select)。第一个选项对应用程序来说似乎是透明的,所以在我看来更容易编程。你会同意吗?在什么情况下我们会选择第二种方案?
    • 如果您需要在所连接的不同网络上采取不同的行为,例如代理或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多