【发布时间】:2013-09-17 10:37:51
【问题描述】:
我对绑定套接字时 INADDR_ANY 的使用和后果感到困惑。当然,INADDR_ANY 监听所有本地接口。我的问题是这会产生什么后果。
我记得读过绑定到特定 IP 地址允许内核处理多路分离,但无法再找到引用。
使用 INADDR_ANY 会产生这种后果,还是我只是从所有本地 IP 接收数据?使用各种装订有什么好处和问题?
讨论此问题的其他问题:
编辑:找到参考。 It's from Unix Network Programming (Stevens)
绑定非通配符 IP 地址的一个优点是 将给定的目标 IP 地址多路分解到给定的服务器 然后由内核完成该过程。
这到底是什么意思?
【问题讨论】:
-
如果你有一个 TCP 服务器,在一台有四个网络接口卡的计算机上运行,每个卡在不同的网络上,并且你想监听来自所有网络的连接,你宁愿每个创建四个套接字绑定到单独的网络,或者使用一个套接字并使用
INADDR_ANY绑定到所有? -
好吧,如果它没有任何性能或其他可能产生负面影响的后果,我想绑定所有这些。该问题试图找出是否存在此类后果。
-
至于解复用,无论如何都必须完成,要么由您使用
select等,要么由内核自动完成(如果您使用select或类似的,它将完成无论如何由内核)。 -
找到了参考,不确定它是否改变了什么。
-
性能不是这里的问题。如果有任何区别,我会说您手动多路复用连接会更慢。这里的问题是您对程序有什么要求:它应该只接收来自单个网络的连接吗?在这种情况下,仅绑定到该网络。它应该接收来自所有网络的连接吗?绑定到
INADDR_ANY。它应该只接收来自一些网络的连接吗?然后由您决定您认为最好的方法,但性能不会成为问题。