客户端的函数close(socket)的返回值,服务器端得到的是哪个? 每次我从客户端关闭连接时,我的服务器也会关闭,当我尝试重新打开它时,我得到: Bindind 套接字错误:地址已在使用中。
但是我在我的服务器中使用了这个功能:
n = read(newsockfd, buffer, sizeof(buffer));
if (n < 0) errore("Errore lettura Socket");
if (n == 0)
{
int true = 1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int));
shutdown(sockfd, SHUT_RDWR);
close(sockfd);
}
最佳答案
要允许重新绑定(bind)到同一地址,必须在创建服务器套接字后、但在 bind() 之前启用
调用,因为实际上是对 SO_REUSEADDR
选项进行 bind
的调用,它实际上尝试将新创建的套接字附加到其预期的 IP 地址和端口,即
s = socket(...);
result = setsockopt(s, SO_REUSEADDR, ...);
result = bind(s, ...);
关于c - Linux : socket and binding issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442655/