我调试以下代码:recvfrom的()超时()
signal(SIGALRM, testt);
alarm(1);
result = recvfrom(listening_socket, buf, maxlen, 0, &from, &fromlen);
printf("stoped\n");
正如man 3 siginterrupt
描述的报警器应中断系统调用,但在我的情况下,它没有。报警处理程序被调用,但recvfrom
不会中断。
但是,当使用signal(2)函数指定了新的信号处理程序时,系统调用默认被中断。
如果在设置警报处理程序后添加siginterrupt(SIGALRM, 1);
,则recvfrom
会按预期中断。
我错过了什么?我的代码有什么问题?
注意:替换signal
与sigaction
是不是我要找的。
请注意'siginterrupt(3)'在POSIX.1-2008中被标记为过时。 – ninjalj 2011-05-08 20:00:57