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!)