【发布时间】:2017-08-02 18:39:44
【问题描述】:
客户端函数close(socket)的返回值,服务端获取到哪个? 每次我从客户端关闭连接时,我的服务器也会关闭,当我尝试重新打开它时,我得到: bindind 套接字出错:Address 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);
}
【问题讨论】:
-
通常是服务器需要设置
SO_REUSEADDR,而不是客户端。 -
是的,这是来自服务器端的代码
-
setsockopt调用应该在您创建套接字时进行 - 它不应该在您从客户端读取的位置附近 -
您似乎要关闭
sockfd而不是newsockfd- 看起来这是一个错字而不是实际的错误? -
@Emperon 在这种情况下,您需要调用
setsockopt在初始调用socket但之前调用bind