我正在使用linux select
实现一个非阻塞套接字IO反应器。假设服务器和客户端正在通信。如果客户端或服务器已关闭,则另一方应该收到EOF
,可以通过read
调用的返回值(C函数调用)来告知。
if(read(fd, ...) == 0) { printf("Endpoint connection failed\n"); }
我的问题是,此EOF
事件是否会与其他数据读取重叠或合并?例如,客户端将1 byte
发送到服务器并立即意外关闭。如果它们在时间上非常接近,服务器上的read
是否仍可分为1 byte
和EOF
?
答案 0 :(得分:2)
如果另一端发送一个字节然后关闭连接,那么您将首先读取一个字节,然后 next 对read
的调用将返回0.
单个read
调用无法同时执行这两个操作 - 因为它必须返回0表示关闭,如果读取某些数据则返回非0。
答案 1 :(得分:0)
EOS将在任何待处理数据之后交付。