EINTR错误
2015-10-15 19:19
375 查看
慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。
EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EINTR错误(被中断的系统调用)。
当碰到EINTR错误的时候,可以采取有一些可以重启的系统调用要进行重启,而对于有一些系统调用是不能够重启的。例如:accept、read、write、select、和open之类的函数来说,是可以进行重启的。不过对于套接字编程中的connect函数我们是不能重启的,若connect函数返回一个EINTR错误的时候,我们不能再次调用它,否则将立即返回一个错误。针对connect不能重启的处理方法是,必须调用select来等待连接完成。
EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EINTR错误(被中断的系统调用)。
当碰到EINTR错误的时候,可以采取有一些可以重启的系统调用要进行重启,而对于有一些系统调用是不能够重启的。例如:accept、read、write、select、和open之类的函数来说,是可以进行重启的。不过对于套接字编程中的connect函数我们是不能重启的,若connect函数返回一个EINTR错误的时候,我们不能再次调用它,否则将立即返回一个错误。针对connect不能重启的处理方法是,必须调用select来等待连接完成。
相关文章推荐
- 音乐播放器的简单入门使用
- linux压缩与解压
- 最长公共子序列
- the working copy"" failed to commit files.
- 为什么将js脚本放在底部而不是头部
- SQL 高级查询
- H - A+B for Input-Output Practice (VII)
- 《程序设计教学法--以Java程序设计为例》
- BP算法第一次接触
- 【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)
- Oracle坏块问题总结
- 【DP/二分】BZOJ 1863:[Zjoi2006]trouble 皇帝的烦恼
- Joda-Time
- 一个iOS bug引发的思考
- 创建带Tomcat服务的Centos Docker镜像
- POJ3984 迷宫问题(DFS)
- Codeforces Round #320 (Div. 2) E. Weakness and Poorness
- Redis 3.0中文官方文档翻译计划(2)
- Zip file is unreadable. Cause: java.util.zip.ZipException: invalid entry size
- php获取post中的json数据的实现方法