Linux C/C++ or 嵌入式面试之《网络编程系列》(6) 套接字编程杂项讨论

1、关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

read/recv:
阻塞与非阻塞recv返回值没有区分,都是

  • <0:出错,
  • =0:对端关闭,
  • >0:接收到的数据大小。

特别:
非阻塞模式下返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。
只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取。

错误码解释:
EWOULDBLOCK:提示需要设置成阻塞模式
EINTR:指操作被中断打断,需要重新读/写
EAGAIN:
从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作

©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值