我正在尝试连接两台机器,比如机器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会返回什么?会选择有用。
答案 0 :(得分:7)
“僵尸”状态中的进程意味着它已经退出,但其父尚未读取其返回代码。可能发生的是您的进程正在接收SIGPIPE信号(这是您在写入已关闭的套接字时默认获得的信号),您的程序已经终止,但僵尸状态尚未解决。
此相关问题提供了有关SIGPIPE以及如何处理它的更多信息:SIGPIPE, Broken pipe