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