gpt4 book ai didi

客户端/服务器聊天室 : Handle unexpected disconnect

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:27 25 4
gpt4 key购买 nike

我用 C 编写了一个服务器 - 客户端聊天室。

服务器为客户端的每个新连接创建一个新的 pthread,这个 pthread 等待接收消息,并将此消息发送给所有其他客户端(使用所有文件描述符的数组)。如果客户端想要退出,他会通知服务器,他将终止 pthread 并从数组中删除文件描述符

这很好用!但是:

如果客户端意外断开连接,例如通过关闭终端,服务器不会从数组中删除文件描述符,当其他客户端想要发送消息时我有一个错误,因为 pthread 试图发送消息到不再是连接的 fd

现在我的问题:

如何在发送消息之前测试客户端套接字的文件描述符是否仍然处于事件状态?

我的部分代码(来自 pthread):

for(i=0; i<*p_Nbr_Clients; i++){ // send the message to all the other clients
if (fd_array[i] != fd){ // <- i want to test the fd here
if ( send(fd_array[i], msg, strlen(msg), 0) == -1 ){
perror("Serveur: send");
}
}
}

最佳答案

检查 recv() 的返回值。

如果用户异常终止则返回值应该为零0。

基于此,您可以轻松关闭 fd。

if(recv(fd,buffer,length,flag) == 0)
close(fd);

关于客户端/服务器聊天室 : Handle unexpected disconnect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620867/

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