gpt4 book ai didi

用于多线程的 C 信号(替代?)

转载 作者:行者123 更新时间:2023-11-30 14:20:42 26 4
gpt4 key购买 nike

我正在通过 TCP 套接字一个接一个地发送一组 float 。我的服务器(接收方 - 同时处理多个请求)程序应该读取数据,直到收到值 0。如果客户端(发送方)在连接后(或最后发送的值后)10 秒内没有发送任何内容,我想要服务器关闭该连接。我发现了这种信号方法,但我认为在线程中使用它不是最佳选择,但对于 fork() 来说更可能,因为它迫使我使用全局变量。我必须将“socket”参数发送到该函数,这样我就可以关闭它,据我所知这是不可能的。

void time_out(int semnal) {
printf("Time out.\n");
close(socket);
exit(1);
}

每次客户端连接或发送内容时,我都会这样调用:

signal(SIGALRM, time_out);
alarm(10);

我还需要哪些其他选项来数 10 秒并能够重新启动此计时器?

最佳答案

您可以将 select 与空 FD 集和超时一起使用。这非常常见并且非常便携。

关于用于多线程的 C 信号(替代?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243907/

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