当前位置: 技术问答>linux和unix
在Linux系统上recv返回错误,通过errno得到的错误消息为"Interrupted system call"
来源: 互联网 发布时间:2015-12-26
本文导语: 我的程序是运行在Linux平台上的一个多线程程序, 在一个socket上调用recv时,返回错误,通过errno得到的错误消息是Interrupted system call 请问这是什么原因啊?(这个socket是阻塞的) 我在网上找了找,好象是因为在recv等待的过程...
我的程序是运行在Linux平台上的一个多线程程序,
在一个socket上调用recv时,返回错误,通过errno得到的错误消息是Interrupted system call
请问这是什么原因啊?(这个socket是阻塞的)
我在网上找了找,好象是因为在recv等待的过程中收到了一个信号,引起该函数中断.
请问是不是因为这个原因啊?应该是的话,我应该怎么解决呢?
谢谢啊!
在一个socket上调用recv时,返回错误,通过errno得到的错误消息是Interrupted system call
请问这是什么原因啊?(这个socket是阻塞的)
我在网上找了找,好象是因为在recv等待的过程中收到了一个信号,引起该函数中断.
请问是不是因为这个原因啊?应该是的话,我应该怎么解决呢?
谢谢啊!
|
像recv,select等阻塞的慢系统调用可能会被内核发给进程的信号所中断。
你用sigaction函数安装一个信号处理函数,指定SA_RESTART作为标志,就可以自动重启被中断的慢系统调用。但你要弄清楚是哪个信号发生中断了你的程序
你用sigaction函数安装一个信号处理函数,指定SA_RESTART作为标志,就可以自动重启被中断的慢系统调用。但你要弄清楚是哪个信号发生中断了你的程序
|
你strace 可以看看具体是什么信号。