gpt4 book ai didi

c - 如果客户端崩溃,服务器立即使用 100% 的 CPU

转载 作者:行者123 更新时间:2023-11-30 17:57:55 25 4
gpt4 key购买 nike

所以我编写了这个服务器/客户端应用程序,它们通过send() 和recv() 相互通信。它是用 C 编写的。服务器可以通过线程处理多个连接。我有一个 Ping 功能,每 90 秒检查一次客户端是否仍然存在。现在我的问题是,如果其中一个客户端崩溃,服务器端的 CPU 立即使用 100%。这是我的 do while 循环,它等待客户端的传入命令,并在发送字符串结束时结束。但如果客户端崩溃,就不会出现结束字符串,我认为它会在这个循环中不断旋转。

    do
{
TCP_recv (&client, buffer, BUF-1);
if (!strcmp(buffer,"mysql"))
{
TCP_recv (&client, buffer, BUF-1);
mysql_real_query(my, buffer, strlen(buffer));
syslog(LOG_INFO,"%s",buffer);
TCP_send (&client, "Server got the MySQL string!", BUF-1);
}
}
while (strcmp(buffer,"end"));

有谁知道服务器如何立即对此使用react而不至于死循环?

PS:如果我的kill-all-clients-who-not-respond 函数启动并关闭套接字,CPU 使用率会立即恢复正常。

最佳答案

通常,当使用 select() 并且客户端已断开连接/崩溃并且您没有从正在检查的套接字中删除套接字 FD 时,就会发生这种情况。这个结果是它将连续迭代 while 循环,而不会阻塞 send()/recv()。通过检查 recv() 和/或 send() 的返回值来检查您是否没有尝试从崩溃的客户端接收数据。

关于c - 如果客户端崩溃,服务器立即使用 100% 的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596936/

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