绑定到零地址的意义是什么

时间:2014-02-14 09:42:01

标签: c linux sockets bind redhat

我在EADDRNOTAVAIL来电中看到connect()个错误。我深入挖掘发现套接字的命名是通过 ip地址完成的。请参阅以下两个电话成功的地方: -

setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&y, sizeof(y)); /* y is int with value 1 */

bind(s, (struct sockaddr *)lockaddr, sizeof(rtinetaddr_tp));

其中

lockaddr={.sin_family=2, .sin_port=0, .sin_addr={.s_addr=0}, .sin_zero=""}

This,我发现在RH网站上,我也有相同的内核。

我的问题是,如果我删除在应用程序的客户端执行任何bind()该怎么办?这是快速治愈还是会导致任何灾难?

其他方式我在客户端运行没有绑定的示例程序。但我正在谈论的应用程序建立了数百个连接。那么在最坏的情况下会发生什么?

2 个答案:

答案 0 :(得分:2)

绑定到零地址与绑定到INADDR_ANY(定义为零)相同。这意味着您可以在任何本地IP地址(服务器端)建立连接或使用出口接口IP地址(客户端)。这很正常。

答案 1 :(得分:1)

如果您不打算使用任何特定地址:客户端端口,则无需调用bind()

内核将选择合适的接口和随机端口来建立客户端对connect()的调用启动的传出连接。