linux中对EINTR错误的处理

Posted qinguoyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中对EINTR错误的处理相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/flyfish10000/articles/2576885.html

  EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EINTR错误(被中断的系统调用)。

  当碰到EINTR错误的时候,可以采取有一些可以重启的系统调用要进行重启,而对于有一些系统调用是不能够重启的。例如:accept、read、write、select、和open之类的函数来说,是可以进行重启的。不过对于套接字编程中的connect函数我们是不能重启的,若connect函数返回一个EINTR错误的时候,我们不能再次调用它,否则将立即返回一个错误。针对connect不能重启的处理方法是,必须调用select来等待连接完成。

 

以上是关于linux中对EINTR错误的处理的主要内容,如果未能解决你的问题,请参考以下文章

Linux编程下EAGAIN和EINTR宏的含义及处理

Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理

“epoll errno (EINTR)4” —— epoll遭遇EINTR(Interrupted system call)

Linux内核错误返回值ERRNO宏列表

linux socket读数据错误解释

socket中的函数遇见EINTR的处理