server 端收到 SIGPIPE 信号的原因就是 Server 向已经关闭的 client 继续发送数据。
上错误代码:
int SendData(char *pbuf , const size_t &len)
{
size_t n = 0;
while (true)
{
n = send(fd, pbuf, len, 0);
if (n < 0)
{
int err = errno;
if (err == EAGAIN)
{
return -1;
}
else if (err == EINTR)
{
continue;
}
else
{
return -2;
}
}
//else
//{
// break;
//}
}
return n;
}
由于自己的粗心,导致注释部分没有写上,所以该代码就进入了无限发送数据的状态,当在这期间 client 关闭之后,server 端就收到了 SIGPIPE 信号。
(SAW:Game Over!)