在没有 select() 的情况下检查 C 中的套接字是否断开连接

标签 c sockets

有没有办法在 C 语言中不用 select() 来检查远程端的套接字是否已断开连接?

我不想使用 select() 的原因是,在我的缓冲区已满的情况下,我故意忽略的套接字上可能有可供读取的数据和 select(readfds=[socket_fd] ) 总是会立即返回让我知道。

最佳答案

如果您在套接字上有一个阻塞的 read() 函数调用,并且它返回整数值 0,这意味着套接字连接已关闭。

while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
     //use buffer contents
}

当数据从另一端发送时,这个循环将继续。

关于在没有 select() 的情况下检查 C 中的套接字是否断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900074/

相关文章:

关于函数中指针的 C 题

c - C 中数组的值初始化为 0 超过数组大小索引

python - 如何从 Django Channels 网络套接字数据包中获取当前用户?

Java 套接字 API : How to tell if a connection has been closed?

c - 如何在一行中组成变量名,作为结构调用的一部分?

c - 进程的虚拟地址空间的哪些部分是可覆盖的?

c - C 中不兼容的指针类型。什么时候使用 * 或 &?对引用指针的概念有疑问

c# - 在 .NET 中开发在线网络摄像头视频监控系统(实时视频流问题)

java - 如何在不关闭服务器套接字的情况下在客户端获得确认?

sockets - Flash 不再运行调试器。 Windows-10 中可能存在套接字问题吗?