Linux socket对EINTR处理
来源:互联网 发布:长寿 知乎 编辑:程序博客网 时间:2024/05/16 01:43
在linux的socket编程中,经常要处理EINTR错误,其值为4,用strerror(errno)调用返回的错误描述为:Interrupted system call. 这里给出一个connect连接中对EINTR处理的网址:
http://www.madore.org/~david/computers/connect-intr.html
另外转载网络上其他兄弟对EINTR错误的处理:
1. accetp()是慢系统调用,在信号产生时会中断其调用并将errno变量设置为EINTR,此时应重新调用accept()。所以使用时应这样:(网址:http://bbs.loveunix.net/viewthread.php?tid=36154)
while(1)
{
if ((connfd = accept(....)) == -1)
{
if (errno == EINTR)
{
continue;
}
perror("accept()");
exit(1);
}
//do something with the connfd
......;
}
2. 引用网址 http://fanqiang.chinaunix.net/a4/b7/20010508/112052.html,其中摘引一段socket的读处理,我把排版做了相应改动:
int my_read(int fd, void *buffer, int length)
{
int bytes_left;
int bytes_read;
char *ptr = NULL;
bytes_left = length;
while (bytes_left > 0)
{
bytes_read = read(fd, ptr, bytes_read);
if (bytes_read < 0)
{
if (errno == EINTR)
{
bytes_read = 0;
}
else
{
return(-1);
}
}
else if (0 == bytes_read)
{
break;
}
bytes_left -= bytes_read;
ptr += bytes_read;
}
return(length-bytes_left);
}
我觉得这个只能针对阻塞模式的socket,非阻塞模式的socket好要处理EAGAIN错误。
转自:http://blog.sina.com.cn/s/blog_5acb430f0100aer1.html
- Linux socket对EINTR处理
- Linux - socket编程处理EINTR错误
- Linux - socket编程处理EINTR错误
- linux中对EINTR错误的处理
- linux中对EINTR错误的处理
- linux中对EINTR错误的处理
- 对EINTR的处理
- 对EINTR的处理
- linux中对errno是EINTR的处理
- linux中对errno是EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- socket中的函数遇见EINTR的处理
- 点滴-Java8的日期类
- 孤独生信狗的生存指南
- Java串口通信的通用模式及其问题
- BestCoder Round #63 (div.2) sequence1
- Linxu笔记(6): yum在线安装与光盘环境搭建
- Linux socket对EINTR处理
- hihocoder #1093
- code[vs]最小生成树 1078,1231
- AVL Tree
- vijos1441 打鼹鼠 (动态规划)
- Android 关闭和开启四大组件的方法
- Serializable中的serialVersionUID到底有啥用
- Java中类加载过程和对象创建过程
- recvmsg 断包问题