我正在编写一个客户机 - 服务器程序。服务器为select()
,readfd1
等待readfd1
的准备就绪状态被读取。如果准备就绪,服务器正在收集数据并打印。一切都很好,但一段时间后,套接字recv()
失败,errno
设置为ETIMEDOUT
。现在我想重写我的程序来挫败这些错误状况。所以我经历了Richard Stevens的“Unix Network Programming”,其中规定了select()
的4个条件来解锁。以下是引起我注意的两个条件:套接字错误意味着套接字是否关闭
A. client sent FIN, here return value of `recv()` will be `0`
B. some socket error, here return value of `recv()` will be `-1`.
我的问题是,套接字错误是否会关闭连接?如果是这样,那么为什么上述两个条件是分开的。如果没有,插座上的下一个recv()
工作?