c - 如何检测 TCP 套接字断开连接(使用 C Berkeley 套接字)

标签 c sockets tcp network-programming

我正在使用循环从 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/

相关文章:

C/C++ 局部变量的细微差别

c - 简单的 C 代码不会向终端打印任何内容

javascript - 客户端未使用 Socket.io 和 Node.js 实时更新

.net - 如何使用powershell连接到tcp socket发送和接收数据?

c# - 取消固定在 .NET 套接字服务器中自动固定的 byte[]

c - 十进制到二进制转换器无法计算大于 1023 的小数

c - 在用户级别 C 中实现信号量

javascript - 套接字代码在Codeigniter Rest API内部不起作用

c++ - 客户端应用崩溃导致服务器崩溃? (C++)

c - 从 TCP 设备对象读取