梁越

socket函数发送接收返回值处理

0 人看过

深信服面试问到的问题

read 函数返回值:

大于0:成功读取的数据长度(Byte);

等于0:该 socket 已经关闭;

等于-1:异常发生,包括但不限于以下几种:

  1. 超时,errno=11;
  2. 连接异常关闭(RST),errno=104;
  3. 主动关闭socket后再去 read,errno=9;
  4. 非阻塞模式下的没有数据时,errno=11。

write 函数返回值:

大于0:成功写入的数据长度(Byte);

等于0:写入长度为0;

小于0:异常发生,包括但不限于以下几种:

  1. 主动关闭再写数据,errno=9;
  2. 连接异常关闭(RST)之后再写数据,errno=32。

send 函数返回值

大于0: 成功写入的数据长度(Byte);

等于0: 对端关闭连接;

等于-1:

  1. tcp窗口太小,数据暂时发不出去,也就是缓冲区满了,errno=EWOULDBLOCK或EAGIN
  2. 被信号中断,需要重试,errno=EINTR
  3. 出错

recv 函数返回值

大于0: 成功接收的数据长度(Byte);

等于0: 对端关闭连接;

等于-1:

  1. 再当前缓冲区无可读数据,errno=EWOULDBLOCK或EAGIN
  2. 被信号中断,需要重试,errno=EINTR
  3. 出错