我正在使用循环从 c Berkeley 套接字中读取消息,但我无法检测到套接字何时断开连接,因此我会接受一个新连接。请帮忙
while(true) {
bzero(buffer,256);
n = read(newsockfd,buffer,255);
printf("%s\n",buffer);
}
最佳答案
检测套接字已连接的唯一方法是写入它。
在 read()/recv()
上出现错误将表明连接已断开,但在读取时不出现错误并不意味着连接已建立。
您可能有兴趣阅读以下内容: http://lkml.indiana.edu/hypermail/linux/kernel/0106.1/1154.html
此外,使用 TCP Keep Alive可能有助于区分不活动和断开的连接(通过定期发送一些内容,即使应用程序没有数据要发送)。
(编辑:删除了@Damon 指出的不正确的句子,谢谢。)
关于c - 如何检测 TCP 套接字断开连接(使用 C Berkeley 套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404008/