Linux:套接字和绑定问题

时间:2017-08-01 16:04:54

标签: c sockets

客户端函数close(socket)的哪个返回值,服务器得到? 每次我从客户端关闭连接时,我的服务器也会关闭,当我尝试重新打开它时,我得到: bindind socket出错:Adddress Alreasy正在使用中。

但是我在服务器中使用了这个功能:

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);

}

1 个答案:

答案 0 :(得分:1)

要允许重新绑定到同一地址,必须在创建服务器套接字后在服务器套接字上启用SO_REUSEADDR选项,但在 bind()调用之前,因为它调用bind实际上试图将新创建的套接字附加到其预期的IP地址和端口,即

s = socket(...);
result = setsockopt(s, SO_REUSEADDR, ...);
result = bind(s, ...);