EAGAIN、EWOULDBLOCK、EINTR与非阻塞的理解
当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与非阻塞的理解相关推荐
- linux socket 套接字状态 EAGAIN EWOULDBLOCK EINTR 与非阻塞 简介
EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写 EINTR:指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一 ...
- EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写在Linux环境下开发经常会碰到很 ...
- EAGAIN、EWOULDBLOCK、EINTR与非阻塞
EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写 EINTR:指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一 ...
- 异步/同步、阻塞/非阻塞的理解
异步/同步.阻塞/非阻塞的理解 [同步和异步] 通俗的讲: 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个 ...
- 处理大并发之一 对异步非阻塞的理解
处理大并发之一 对异步非阻塞的理解 在研究nginx和node.js的时候常会遇到异步.非阻塞等,之前自己也经常使用epoll,对其同步与阻塞,异步与非阻塞有了一定的认识,现对参考资料总结下. 首先讨 ...
- 同步、异步与阻塞、非阻塞的理解
一.同步.异步与阻塞.非阻塞 同步和异步都是基于应用程序所在操作系统处理IO事件所采用的方式,同步是应用程序要直接参与IO读写的操作.异步所有的IO读写交给搡作系统去处理,应用程序只需要等待通知. 网 ...
- select函数的阻塞和非阻塞态理解(实践总结)
1.select函数的阻塞和非阻塞 int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct tim ...
- Swoole同步/异步/阻塞/非阻塞的理解
说明总结 同步异步:说的是kernel返回处理信息的方法策略 针对程序中碰到耗时任务时,传递给Kernel Kernel处理信息的方式 有异步api函数是异步 没的话是同步 IO立即返回:主函数中 ...
- 同步 异步 阻塞 非阻塞深入理解
同步:执行一个操作之后,等待结果,然后才继续执行后续的操作. 异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作.生活中的同步便是异步 阻塞:进程给CPU传达一个任务 ...
最新文章
- 百面机器学习之经典算法
- 怎么计算一组数据的波动_数据分析(一):数据描述统计
- Python单元测试--使用装饰器实现测试跳过和预期故障
- C++ 标准库中的异常
- 十进制数转换为二进制数
- 优秀产品必经的14个拷问
- phpstorm 调试_PhpStorm中的多用户调试
- 全新拟态个人主页/引导页源码
- Nginx反向代理 实现Web负载均衡
- 委托与事件-闲聊系列(二)
- postgresql生产环境数据库迁移
- 无法显示jinglingzhoushou-2.0.4.AppImage
- 校园网络项目PT模拟
- setdate java_在PreparedStatement中使用setDate
- 全球压缩毛巾行业调研及趋势分析报告
- ubuntu+vulkan
- Tomcat日志分割
- 关于程序员抵制996的一些想法
- 学生请销假管理系统java_学生请假管理系统.doc
- 计算机毕业设计网吧管理,【毕业设计】计算机毕业设计网吧管理系统