我正在通过TCP套接字一个接一个地发送浮点数数组。我的服务器(接收器-同时处理多个请求)程序应该读取数据,直到接收到值0。如果客户端(发送者)没有发送任何10秒后,他连接(或后最后发送值),我希望服务器关闭该连接。我发现了这种信号方法,但我认为在线程中使用它不是最佳的,而更有可能用于fork(),因为它迫使我使用全局变量。我必须将"socket"参数发送给函数,这样我就可以关闭它,而且我敢肯定这是不可能的。
void time_out(int semnal) {
printf("Time out.n");
close(socket);
exit(1);
}
,每次客户端连接或发送东西时,我调用它:
signal(SIGALRM, time_out);
alarm(10);
还有什么其他的选择,我必须计数10秒,并能够重新启动这个计时器?
您可以使用带有空FD集和超时的select。这很常见,也很便携