我在connect()
调用中看到EADDRNOTAVAIL
错误。 我深入地发现,套接字的命名是由超过零的 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=""}
这个 ,我在RH网站find的,也是我有相同的内核。
我的问题是,如果我删除在应用程序的客户端的任何bind()
? 这将是一个快速治疗或将导致任何灾难?
其他方式我运行示例程序没有绑定在客户端。 但是我正在谈论的应用程序build立了数百个连接。 那么在最坏的情况下会发生什么?
绑定到零地址与绑定到INADDR_ANY
(定义为零)相同。 这意味着您可以在任何本地IP地址(服务器端)上建立连接,或使用出口接口IP地址(客户端)。 这很正常。
如果您不想使用客户端的任何特定地址:端口,则不需要调用bind()
。
内核将选择合适的接口和一个随机的端口来建立由客户端调用connect()
启动的传出连接。