Socket异步通信中的EAGAIN错误
来源:互联网 发布:看盘软件下载 编辑:程序博客网 时间:2024/05/26 07:27
在Linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno代码为11(EAGAIN),这表明在非阻塞模式下调用了阻塞操作,在该操作无法完成时返回这个错误。这个错误不会破坏socket的同步,不需要特别处理,继续对socket执行read操作即可。
另外,如果出现EINTR(errno为4),错误描述Interrupted system call,操作也应该继续。
最后,如果recv的返回值为0,表明连接断开,此时可以关闭socket了。
下边给出一个简单的读取socket的例子:
#include < assert.h >#include < errno.h >#include < stdio.h >#include < unistd.h > int Recv(int sock, void *data, int len){if(sock == 0)return -1; assert(m_sock > 0 && len >= 0); int ret, nread = 0; unsigned char *p = (unsigned char *)data; while(nread < len){ret = read(sock, p + nread, len - nread); if(ret < 0 && (errno == EAGAIN || errno == EINTR))continue; if(ret < 0){perror("ERROR socket read");return -1;} if(ret == 0)return -2; nread += ret;} return nread;}
0 0
- Socket异步通信中的EAGAIN错误
- Socket编程中的EAGAIN
- Socket编程中的EAGAIN
- Socket编程中的EAGAIN
- TCP 中的EAGAIN错误
- Linux中的EAGAIN错误码
- linux非阻塞的socket EAGAIN的错误处理
- Socket的send函数在执行时报EAGAIN的错误
- linux非阻塞的socket EAGAIN的错误处理
- Linux - 非阻塞socket编程处理EAGAIN错误
- linux非阻塞的socket EAGAIN的错误处理
- 异步Socket通信
- 异步Socket通信总结
- 异步Socket通信
- 异步Socket通信总结
- 异步Socket通信总结
- 多线程异步Socket通信
- 异步Socket通信总结
- iOS如何隐藏TabBar
- Java动态修改代码
- HDU1754 I Hate It 线段树 区间更新 区间查找 最大值
- CCSpriteFrameCache和帧动画
- 白话经典算法系列之二 直接插入排序的三种实现
- Socket异步通信中的EAGAIN错误
- RST攻击
- 中国手机品牌需要挑战高端
- 你浮躁了么?
- 【PHP】WAMP / XAMPP / WampServer / AppServ 介绍
- android 再按一次后退键退出程序
- 第二弹,博弈游戏与动态规划
- Android UI设计官方教程
- STM32学习笔记(7):USART串口的使用