当socket设置为非阻塞的情况时(设置方法参考该文)

在select的时候,或者read的时候,都会遇到错误,并返回errno,

我们查看errno.h中会看到:

#define EINTR             4   /* Interrupted system call  */

#define EAGAIN          11  /* Resource unavailable, try again          */

#define EWOULDBLOCK    EAGAIN

由上面可以看出来,EWOULDBLOCK与EAGAIN 等价,我们当做一个errno处理即可。

select示例:

    for(;;){status = select(socket + 1, &fd_read, (fd_set *)0, (fd_set *)0, &wwait);if(status < 0){if((errno == EINTR) || (errno == EAGAIN))continue;printf("%s", strerror(errno));return -1;}else if(status == 0){//timeoutprintf("%s", strerror(errno));return 0;}break;}

read示例:

int myfunc(int length,int socket,char *pBufRecv)
{int nleft, nread;nleft = length;while(nleft > 0){nread = recv(socket, pBufRecv, nleft,0);//if the connection has been gracefully closed, the return value is zero.if(nread == 0){printf("%s", strerror(errno));return -1;}if(nread < 0){if(errno == EINTR ||(errno == EAGAIN))continue;if(errno == EWOULDBLOCK)continue;printf("%s", strerror(errno));return -1;}nleft -= nread;pBufRecv += nread;}return(length - nleft);
}

EAGAIN、EWOULDBLOCK、EINTR与非阻塞的理解相关推荐

  1. linux socket 套接字状态 EAGAIN EWOULDBLOCK EINTR 与非阻塞 简介

    EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写 EINTR:指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一 ...

  2. EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接

    EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写在Linux环境下开发经常会碰到很 ...

  3. EAGAIN、EWOULDBLOCK、EINTR与非阻塞

    EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写 EINTR:指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一 ...

  4. 异步/同步、阻塞/非阻塞的理解

    异步/同步.阻塞/非阻塞的理解 [同步和异步] 通俗的讲: 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式.  异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个 ...

  5. 处理大并发之一 对异步非阻塞的理解

    处理大并发之一 对异步非阻塞的理解 在研究nginx和node.js的时候常会遇到异步.非阻塞等,之前自己也经常使用epoll,对其同步与阻塞,异步与非阻塞有了一定的认识,现对参考资料总结下. 首先讨 ...

  6. 同步、异步与阻塞、非阻塞的理解

    一.同步.异步与阻塞.非阻塞 同步和异步都是基于应用程序所在操作系统处理IO事件所采用的方式,同步是应用程序要直接参与IO读写的操作.异步所有的IO读写交给搡作系统去处理,应用程序只需要等待通知. 网 ...

  7. select函数的阻塞和非阻塞态理解(实践总结)

    1.select函数的阻塞和非阻塞 int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct tim ...

  8. Swoole同步/异步/阻塞/非阻塞的理解

    说明总结 同步异步:说的是kernel返回处理信息的方法策略 针对程序中碰到耗时任务时,传递给Kernel  Kernel处理信息的方式  有异步api函数是异步 没的话是同步 IO立即返回:主函数中 ...

  9. 同步 异步 阻塞 非阻塞深入理解

    同步:执行一个操作之后,等待结果,然后才继续执行后续的操作. 异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作.生活中的同步便是异步 阻塞:进程给CPU传达一个任务 ...

最新文章

  1. 百面机器学习之经典算法
  2. 怎么计算一组数据的波动_数据分析(一):数据描述统计
  3. Python单元测试--使用装饰器实现测试跳过和预期故障
  4. C++ 标准库中的异常
  5. 十进制数转换为二进制数
  6. 优秀产品必经的14个拷问
  7. phpstorm 调试_PhpStorm中的多用户调试
  8. 全新拟态个人主页/引导页源码
  9. Nginx反向代理 实现Web负载均衡
  10. 委托与事件-闲聊系列(二)
  11. postgresql生产环境数据库迁移
  12. 无法显示jinglingzhoushou-2.0.4.AppImage
  13. 校园网络项目PT模拟
  14. setdate java_在PreparedStatement中使用setDate
  15. 全球压缩毛巾行业调研及趋势分析报告
  16. ubuntu+vulkan
  17. Tomcat日志分割
  18. 关于程序员抵制996的一些想法
  19. 学生请销假管理系统java_学生请假管理系统.doc
  20. 计算机毕业设计网吧管理,【毕业设计】计算机毕业设计网吧管理系统

热门文章

  1. 样本方差、母体方差、样本标准差、母体标准差
  2. sslocal客户端运行报错
  3. struts 2——拦截器的实现实例
  4. 正则下,全角字符,半角字符如何匹配
  5. 私有云搭建远程桌面控制服务
  6. c r语言中rank函数,R语言rank函数详细解析
  7. python wave音频库使用(一)
  8. win10电脑上WLAN网卡不见了,无线网路连接不上怎么办?
  9. 穿山甲和广点通激励视频广告打开失败的异常处理
  10. 焊接件技术要求怎么写_焊接件技术要求