深信服面试问到的问题
read 函数返回值:
大于0:成功读取的数据长度(Byte);
等于0:该 socket 已经关闭;
等于-1:异常发生,包括但不限于以下几种:
- 超时,errno=11;
- 连接异常关闭(RST),errno=104;
- 主动关闭socket后再去 read,errno=9;
- 非阻塞模式下的没有数据时,errno=11。
write 函数返回值:
大于0:成功写入的数据长度(Byte);
等于0:写入长度为0;
小于0:异常发生,包括但不限于以下几种:
- 主动关闭再写数据,errno=9;
- 连接异常关闭(RST)之后再写数据,errno=32。
send 函数返回值
大于0: 成功写入的数据长度(Byte);
等于0: 对端关闭连接;
等于-1:
- tcp窗口太小,数据暂时发不出去,也就是缓冲区满了,errno=EWOULDBLOCK或EAGIN
- 被信号中断,需要重试,errno=EINTR
- 出错
recv 函数返回值
大于0: 成功接收的数据长度(Byte);
等于0: 对端关闭连接;
等于-1:
- 再当前缓冲区无可读数据,errno=EWOULDBLOCK或EAGIN
- 被信号中断,需要重试,errno=EINTR
- 出错