0

我正在通过 TCP socket 一个一个地发送一组浮点数。我的服务器(接收器 - 同时处理多个请求)程序应该读取数据,直到接收到值 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 秒才能重新启动此计时器?

4

1 回答 1

2

您可以将 select 与空的 FD 集和超时一起使用。这很常见,也很便携。

于 2013-03-06T09:54:06.370 回答