博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux - socket编程处理EINTR错误
阅读量:6242 次
发布时间:2019-06-22

本文共 1056 字,大约阅读时间需要 3 分钟。

在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 

你可能感兴趣的文章
叶成辉成神州控股新任CEO 曾在IBM/EMC任职
查看>>
中小企业客户营收增长将成微博2016年主推动力
查看>>
四川能投成功进军智慧城市投资市场
查看>>
雅虎公开三封收到的FBI国家安全信函
查看>>
云计算在大数据形式下的发展
查看>>
如何更好地进行机房项目的控制成本
查看>>
爱立信高通中兴等成立Avanci专利授权平台 旨在加速物联网发展
查看>>
美情报公司:勒索病毒WannaCry的创作者可能是中国人
查看>>
华科技:以市场为导向 以用户体验为标准
查看>>
诺基亚携手Facebook联合开展跨大西洋现场测试
查看>>
如何检查MySQL数据库的主从延时?
查看>>
红炜:改变光伏电站融资难也需水到渠成
查看>>
三星用户迎利好 三星将推月度安全更新
查看>>
网络时代安全问题凸显 互联网金融如何有效避开痛点?
查看>>
移动OA如何治愈外出办公“焦虑症”?
查看>>
电信运营商解决方案
查看>>
日本显示屏公司的尴尬:夏普被收购 JDI也岌岌可危
查看>>
[MySQL 5.7]:binlog --statement
查看>>
MicroProfile变成了Eclipse MicroProfile
查看>>
中国电信10G PON演进研究成果卓著:为现网升级铺平道路 加速千兆时代到来
查看>>