gpt4 book ai didi

c++ - 等待 recv 中的数据时关闭线程

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:52 24 4
gpt4 key购买 nike

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

....
}

最佳答案

听起来你应该打开线程,等待 5 秒,然后检查 sClient 的数据。如果没有数据,那么你可以立即关闭线程。否则,如果有数据,你可以调用recv来真正获取数据。

为此,您可以使用带有超时的 select 调用来检查套接字上的新数据。

(请参阅“socket timeout: It works, but why and how, mainly the select() function?”以了解如何使用超时选择。)

关于c++ - 等待 recv 中的数据时关闭线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15717705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com