首先,我是 C 的新手。我继承了一些遗留的 C 代码。在此应用程序中,超时无法正常工作。它使用信号和警报来创建超时。我已经阅读了两者,但我仍然遇到问题。
signal(SIGALRM, timeouthandler);
alarm(3);
...(connection to a server that may hang)...
alarm(0);
timeouthandler(){
...(connection to a server that may hang)...
}
现在这工作正常,直到我必须将超时添加到代码的不同部分。
signal(SIGALRM, timeouthandler2);
alarm(3);
...(log the time out)...
alarm(0);
timeouthandler2(){
...(log the time out)...
}
为什么我的第二次超时不起作用?信号和报警之间有什么联系?是否有更清洁(不复杂)的方式来做到这一点。此外,我将需要另一个包含这两个超时的超时处理程序。谢谢!!
编辑:好的,所以看起来我不能同时进行两次超时。让我解释一下我想要做什么。我有一个要连接的服务器列表。我希望每个连接有 3 秒的连接时间,如果没有超时。然后我还希望global
服务器列表超时,这样如果所有连接时间的总时间超过 12 秒,它就会超时并继续前进。还有其他方法可以做到这一点吗?