すべてのクライアントに対してスレッドを作成するサーバーがあります。これは、プログラムがデータの送信を待機するスレッド関数です。5 秒以内にデータが送信されない場合は、どうにかしてこのスレッドを閉じる必要があります。私はその信号/アラームの組み合わせで試してみましたが、何とか動作しますが、sClient(socket) が閉じているため、残りのスレッド関数はエラーを出力し続けています。どうすればこれを機能させることができますか、または他の解決策はありますか?
void time_out() {
char r = "-1";
printf("Time out");
send(sClient, &r, 10, 0);
close(sClient);
}
void* thread(void *arg) {
sClient = (int)arg;
int size;
char* buffer = (char*)malloc(300);
signal(SIGALRM, time_out);
alarm(5);
if (recv(sClient, (char*)&size, sizeof(int), 0) < 0) {
printf("Error when getting length \n");
}
....
}