我有一个应用程序需要执行以下操作:
- 如果发生事件(与服务器断开连接),则会启动一个长计时器(例如 5 分钟)。然后应用程序尝试重新连接到服务器。
- 如果重新连接失败,则会启动一个短计时器(20 秒),该计时器应尝试再次重新连接。
- 如果成功,则长计时器应继续运行。
- 当长定时器到期时,如果没有连接,应用程序应该退出,否则它应该正常继续。
我受到限制,因为我不能使用线程,只能使用进程。我也不能等待 reconnect() 的结果返回。
到目前为止,我有这样的设计:
int main(int argc, char **argv)
{
/* do main loop work, if disconnected, call reconnect() & continue doing work */
}
void reconnect()
{
pid = fork();
if (pid >= 0) {
/*Successful fork*/
if (pid == 0) {
rv = attempt_reconnect;
if (rv == 0) {
/*Notify sig_child Success*/
exit(0);
} else {
/*Notify sig_child Fail*/
exit(1);
}
}
}
}
void sig_child(int signum)
{
if(fork returned success) {
set flag to continue network stuff
}
else {
alarm(20);
}
}
void sig_alarm(int signo)
{
/*Received alarm, trying to reconnect...*/
reconnect();
}
任何帮助将不胜感激!
编辑
我想我有一个从这里的例子工作的解决方案。它允许我创建具有单独 ID 的计时器,然后确定哪个已向程序发出信号