我在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()
该怎么办?这是快速治愈还是会导致任何灾难?
其他方式我在客户端运行没有绑定的示例程序。但我正在谈论的应用程序建立了数百个连接。那么在最坏的情况下会发生什么?
答案 0 :(得分:2)
绑定到零地址与绑定到INADDR_ANY
(定义为零)相同。这意味着您可以在任何本地IP地址(服务器端)建立连接或使用出口接口IP地址(客户端)。这很正常。
答案 1 :(得分:1)
如果您不打算使用任何特定地址:客户端端口,则无需调用bind()
。
内核将选择合适的接口和随机端口来建立客户端对connect()
的调用启动的传出连接。