C轮询编程:如何检测客户端是否挂起

时间:2017-04-24 00:41:25

标签: c linux gnu

我正在开发一个简单的C程序,其中有两个源文件:server.c和client.c

我使用套接字正确连接了所有内容,并使用poll()函数轮询键盘以获取数据(以及连接到管道的shell)。

我能够检测客户端何时使用^ D和^ C命令知道杀死子进程,并退出客户端和服务器终端。

但是,有没有办法检测客户端是否挂机(即我在客户端终端选项卡上明确单击x)?因为现在,服务器选项卡没有检测到这一点,也没有关闭。我想避免使用超时

1 个答案:

答案 0 :(得分:0)

您可以使用recv() sys调用不断探测客户端套接字。它被设计为在客户端断开连接时返回0.

while (1) {

  //Get request from client, leave if client quits
  if (recv(client_socket, client_request, sizeof(client_request), 0) == 0) {
    break;
  }
}

OR

// This while condition will fail when recv returns 0, because C
while (recv(client_socket, client_request, sizeof(client_request), 0)) {
 // insert code here
}

希望这有帮助