C插座编程和轮询:如何检测客户是否挂断



我正在处理一个简单的C程序,其中有两个源文件:server.c and Client.c

我与插座正确连接了所有内容,然后我使用poll((函数来轮询数据的键盘(以及连接到管道的外壳(。

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

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

您可以使用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;
  }
}

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

希望这对🤓

有帮助

最新更新