客户端函数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);
}
答案 0 :(得分:1)
要允许重新绑定到同一地址,必须在创建服务器套接字后在服务器套接字上启用SO_REUSEADDR
选项,但在 bind()
调用之前,因为它调用bind
实际上试图将新创建的套接字附加到其预期的IP地址和端口,即
s = socket(...);
result = setsockopt(s, SO_REUSEADDR, ...);
result = bind(s, ...);