所以我编写了这个服务器/客户端应用程序,它们通过 send() 和 recv() 相互通信。它是用 C 编写的。服务器可以通过线程处理多个连接。我有一个 Ping 功能,每 90 秒检查一次客户端是否还活着。现在我的问题是,如果其中一个客户端崩溃,服务器端的 CPU 会立即使用 100%。这是我的 do while 循环,它等待客户端的传入命令,如果正在发送字符串 end 则结束。但是,如果客户端崩溃,则没有结束字符串出现,我认为它会在这个循环中不断旋转。
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"));
有没有人知道服务器如何立即对此做出反应而不是死循环?
PS:如果我的 kill-all-clients-who-not-respond 函数启动并关闭套接字,CPU 使用率会立即恢复正常。