Socket编程中Interrupted system call 解释及解决办法
来源:互联网 发布:java调用百度地图api 编辑:程序博客网 时间:2024/04/30 20:34
我们用术语慢系统调用(slowsystem call)描述accept函数,该术语也适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用有可能永远无法返回,多数网络支持函数都属于这一类。举例来说,如果没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。类似的,如果客户端从未发送过数据,那么read调用将永不返回。其他慢系统调用的例子是对管道和终端设备的读和写。一个值得注意的例外是磁盘IO,它们一般都会返回到调用者(假设没有灾难性的硬件事故)。
适用于慢系统调用的基本规则是:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应处理函数返回时,该系统调用可能返回一个EINTR错误。所以,我们必须对慢系统调用返回的EINTR有所准备。
为了处理被中断的accept,可以改成如下形式:
for (;;)
{
if((connfd=accept(listenfd,NULL, NULL))< 0)
{
if (errno == EINTR)
continue;
else
{
printf("accept error");
break;
}
}
break;
}
这段代码所做的事情就是自己重启被中断的系统调用。对于accept,以及诸如read、write、select和open之类的函数,这是适合的。不过有一个函数我们不能重启:connect。如果该函数返回EINTR,我们就不能再次调用它,否则将立即返回一个错误。当connect被一个捕获信号中断而且不自动重启时,我们必须调用select来等待连接完成。
- Socket编程中Interrupted system call 解释及解决办法
- Socket编程中Interrupted system call 解释及解决办法
- connect & Interrupted System Call
- Interrupted system call
- epoll_wait Interrupted system call
- zabbix连接性问题interrupted system call
- linux下使用setitimer时accept返回Interrupted system call
- gdb 调试网络程序发现connect 失败(interrupted system call)
- JavaScript中this、apply()、call()的用法及解释示例
- Linux下semop等待信号时出现Interrupted System Call错误(EINTR)
- “epoll errno 4” —— epoll遭遇EINTR(Interrupted system call)
- ERROR[5378]: res_musiconhold.c:645 monmp3thread: poll() failed: Interrupted system call
- msgrcv出错errno=4[Interrupted system call]系统调用被信号中断
- vc中socket编程步骤及实例
- vc中socket编程步骤及实例
- keil中 如何解决warning L13:Recursive call to Function 及overlay解释
- socket编程模式生动解释
- 常见异常解释及解决办法
- 第十七周 项目五:玩日期时间
- json-lib使用,JSONObject和JSONArray
- Java实习感悟
- vsual studio 统计代码行数
- Zend Framework 访问控制列表(ACL)设置示例之一
- Socket编程中Interrupted system call 解释及解决办法
- hdu2036 改革春风吹满地
- html5 canvas绘制图片模糊的问题
- Superuser总结一
- openfire
- refreshing X Gradle project, building ‘MyApplication' Gradle project info ------android studio
- Java中泛型插入排序,继承Comparable接口
- Struts、Servlet对Ajax的简单实现
- Visual C++实现微秒级精度定时器