我有一个服务器,它为每个客户端创建一个线程。这是线程函数,我的程序在其中等待发送数据。如果 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");
}
....
}