如果 select 返回可读,结果只读到 0 字节,这是什么情况?

对端关闭,可读,read 返回 0,表示已经读到文件末尾。

  1. read返回0的唯一条件是对方gracefully close了socket
  2. select > 0,表示套接字里有东西,
  3. read = 0,表示里面的东西是“对方关闭连接”。

当select出错时,会将接口置为可读又可写。这时就要通过判断select的返回值为-1来区分。