【发布时间】:2016-05-03 02:35:41
【问题描述】:
我正在使用 linux select 实现一个非阻塞套接字 IO 反应器。假设服务器和客户端正在通信。如果客户端或服务器宕机,对方应该会收到一个EOF,这可以通过read调用(C函数调用)的返回值来判断。
if(read(fd, ...) == 0) { printf("Endpoint connection failed\n"); }
我的问题是,这个EOF 事件会与读取的其他数据重叠或合并吗?例如,客户端向服务器发送1 byte 并意外立即关闭。如果它们发生的时间非常接近,服务器上的read 是否仍然可以与1 byte 和EOF 分离?
【问题讨论】:
-
如果您知道自己在使用 Linux,我建议您避免使用
select并改用epoll。或者考虑一个事件库,例如libev...我正在写my own framework,因为我喜欢修补这些东西。你可以看看。
标签: c sockets nonblocking multiplexing