c - 如果客户端关闭连接,套接字描述符会改变吗?

标签 c linux sockets tcp

我们有一台服务器,它可以接受的传入连接数量有限。 由于各种不同的原因,我们有多个客户端以不同的时间间隔连接到服务器。

服务器的至少一个功能要求它处理客户端的请求并在同一个套接字上回复。然而:

  • 客户端提示超时(我相信关闭套接字)
  • 服务器成功完成处理,但线程抛出一个 SIGCHLD,因为套接字已关闭。

我有类似于下面的代码,用于检查套接字描述符。

if (connect_desc > 0)
{
    if (write(connect_desc, buffer, sizeof(buffer)) < 0)
    {
        printf("write error\n");
    }
}
else
    printf("connect_desc < 0\n");

我的问题是:

如果套接字被客户端关闭,套接字描述符在服务器上的值会改变吗?如果没有,有没有办法在我的代码中捕获它?

我没有看到最后打印出来的。

最佳答案

Q: Will the descriptor change?

答:没有

Q: How can I check the status of my connection?

答:一种方法是简单地尝试写入套接字,然后检查错误状态。

强烈建议:

关于c - 如果客户端关闭连接,套接字描述符会改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552403/

相关文章:

c - 使用共享内存在两个进程之间传递套接字描述符

c++ - 连接到外部 IP 失败

sockets - 将或 "connect"QUdpSocket 绑定(bind)到远程主机和端口?

c - 这个内核代码是什么意思?

c - 当我将函数从 main 中分离出来时,结构出现问题

c - 当您将学生人数的值输入为 3 时,这个 while 循环如何打印 3 作为 cnt 的值而不是 2?

c - sprintf 转换在格式末尾缺少类型

linux - 如何在不同的驱动程序之间共享设备树节点中的信息

c - 在 C 中同时执行两个本地套接字服务器

java - 如何捕获 IOException "Connection reset by peer"?