我正在尝试连接两台机器,比如机器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);
}
Run Code Online (Sandbox Code Playgroud)
如何找到另一侧插座是否关闭?如果目标套接字关闭,send会返回什么?会选择有用.
"僵尸"状态中的进程意味着它已经退出,但其父级尚未读取其返回代码.可能发生的是您的进程正在接收SIGPIPE信号(这是您在写入已关闭的套接字时默认获得的信号),您的程序已经终止,但僵尸状态尚未解决.
这个相关的问题提供了有关SIGPIPE以及如何处理它的更多信息:SIGPIPE,Broken pipe