我正在TCP套接字上逐个发送一个浮点数组。我的服务器(接收器 - 同时处理多个请求)程序应该读取数据,直到收到值0.如果客户端(发送者)在连接后(或在最后发送的值之后)10秒内没有发送任何内容,我希望服务器关闭该连接。 我发现了这种信号方法,但我认为在线程中使用它不是最佳的,但更可能是fork(),因为它迫使我使用全局变量。我必须将“socket”参数发送给函数,所以我可以关闭它并且AFAIK这是不可能的。
void time_out(int semnal) {
printf("Time out.\n");
close(socket);
exit(1);
}
每次客户端连接或发送内容时,我都会这样称呼:
signal(SIGALRM, time_out);
alarm(10);
我还有什么其他选项可以计算10秒并且能够重新启动此计时器?
答案 0 :(得分:2)
您可以使用带有空FD设置和超时的select。这很常见且很便携。