套接字send()卡在C中

时间:2011-07-26 23:38:06

标签: c sockets send

我正在尝试连接两台机器,比如机器A和B.我正在尝试从A到B发送TCP消息(单向)。在正常情况下,这工作正常。通信顺畅时,如果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);
            }

如何找到另一侧插座是否关闭?如果目标套接字关闭,send会返回什么?会选择有用。

1 个答案:

答案 0 :(得分:7)

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

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