【问题标题】:Socket send () stuck in CSocket send() 卡在 C 中
【发布时间】:2011-10-13 20:27:27
【问题描述】:

我正在尝试连接两台机器,比如机器 A 和 B。我正在尝试将 TCP 消息从 A 发送到 B(一种方式)。在正常情况下,这工作正常。当通信顺利时,如果 B 中的套接字关闭,则来自 A 的 send() 将永远卡住。并将进程置于僵尸状态。我在机器 A 中有处于阻塞模式的套接字。下面是永远卡住的代码。

           if (send (txSock,&txSockbuf,sizeof(sockstruct),0) == -1) {
                printf ("Error in sending the socket Data\n");
                            }
            else {
                printf ("The SENT String is %s \n",sock_buf);
            }

如何判断对方socket是否关闭??如果目标套接字关闭,发送返回什么?选择会有所帮助。

【问题讨论】:

    标签: c sockets send


    【解决方案1】:

    处于“僵尸”状态的进程意味着它已经退出,但是它的父进程还没有读取到它的返回码。可能发生的情况是您的进程正在接收 SIGPIPE 信号(这是您在写入关闭的套接字时默认获得的信号),您的程序已经终止,但僵尸状态尚未解决。

    这个相关问题提供了有关 SIGPIPE 以及如何处理它的更多信息:SIGPIPE, Broken pipe

    【讨论】:

    • 谢谢。让我研究一下。
    • 明白。有没有办法在我尝试写/发送之前找出管道是否损坏?
    • 没有。因为管道随时可能损坏,即使有办法在写入之前进行检查,它也可能在您检查之后之前您致电send() 之前损坏。检查的唯一方法是尝试。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2013-01-19
    • 2014-08-17
    • 2020-12-10
    • 2016-08-25
    • 2023-03-18
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多