1. 程式人生 > >RECV的超時總結

RECV的超時總結

說明:針對recv返回值,阻塞情況下,當網路異常時,recv是返回個-1,還是阻塞不動,還是根據情況而定呢 一、 不論是阻塞還是非阻塞都是 <0:出錯; =0:連線關閉; >0接收到資料大小 二、 Recv<0情況 1、特別:返回值 <0時並且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情況下認為連線是正常的,繼續接收。 2、只是阻塞模式下recv會阻塞著接收資料(非阻塞模式下如果沒有資料會返回,不會阻塞著讀,因此需要迴圈讀取)。 阻塞情況下,阻塞接收,不會返回負數嗎? 3、很多人說阻塞模式下read會阻塞著讀,是否這樣?我和同事試了不會阻塞,而是會返回一個負數。 4、阻塞模式下read返回值 < 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN時,連線異常需要關閉,read返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)時表示沒有資料,需要繼續接收,如果返回值大於0表示接送到資料。