使用EOF复用非阻塞套接字IO

时间:2016-05-03 02:35:42

标签: c sockets nonblocking multiplexing

我正在使用linux select实现一个非阻塞套接字IO反应器。假设服务器和客户端正在通信。如果客户端或服务器已关闭,则另一方应该收到EOF,可以通过read调用的返回值(C函数调用)来告知。

if(read(fd, ...) == 0) { printf("Endpoint connection failed\n"); }

我的问题是,此EOF事件是否会与其他数据读取重叠或合并?例如,客户端将1 byte发送到服务器并立即意外关闭。如果它们在时间上非常接近,服务器上的read是否仍可分为1 byteEOF

2 个答案:

答案 0 :(得分:2)

如果另一端发送一个字节然后关闭连接,那么您将首先读取一个字节,然后 next read的调用将返回0.

单个read调用无法同时执行这两个操作 - 因为它必须返回0表示关闭,如果读取某些数据则返回非0。

答案 1 :(得分:0)

EOS将在任何待处理数据之后交付。