0
我有一臺服務器,它爲每個客戶端創建一個線程。這是線程函數,我的程序等待數據發送。如果5秒內沒有數據發送,我需要以某種方式關閉此線程。我嘗試了這種信號/報警組合,並以某種方式工作,但其餘線程函數繼續打印錯誤,因爲sClient(套接字)已關閉。我怎樣才能做這項工作,或者其他解決方案?在recv中等待數據時關閉線程
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");
}
....
}
不知道你想要做什麼了,但是那聽起來像是你要打開一個客戶端一個線程,等待5秒鐘,然後關閉它,如果客戶在那段時間內沒有發送數據的話。那是對的嗎? – maditya
是的,它是:)。我該怎麼做 ? – vladCovaliov
你有什麼理由決定使用SIGALRM方法嗎?在接聽電話之前,爲什麼不只是在你的線程中「睡(5)」?是因爲recv塊嗎? – maditya