0

TCPソケットを介してfloatの配列を1つずつ送信しています。私のサーバー(受信者-複数の要求を同時に処理する)プログラムは、値0を受信するまでデータを読み取る必要があります。クライアント(送信者)が接続後(または最後に送信された値の後)10秒間何も送信しない場合は、その接続を閉じるためのサーバー。このシグナルアプローチを見つけましたが、スレッドで使用するのは最適ではないと思いますが、グローバル変数を使用する必要があるため、fork()で使用する可能性が高くなります。「ソケット」パラメータを関数に送信する必要があるので、関数を閉じることができますが、これは不可能です。

void time_out(int semnal) {
  printf("Time out.\n");
  close(socket);
  exit(1);
}

そして、クライアントが接続するか、何かを送信するたびに、私はこれを呼び出します:

signal(SIGALRM, time_out);
alarm(10);

10秒をカウントし、このタイマーを再開できるようにするには、他にどのようなオプションが必要ですか?

4

1 に答える 1

2

空の FD セットとタイムアウトで select を使用できます。これはかなり一般的で、かなり移植性があります。

于 2013-03-06T09:54:06.370 に答える