这是服务器代码的一部分。当客户端退出时,服务器程序在以下行之后死亡而不进行核对:
n = send(s, buf+total, bytesleft, 0);
这是功能:
static ssize_t conn_Send(int s, u8* buf, ssize_t len)
{
ssize_t total = 0; // how many bytes we've sent
ssize_t bytesleft = len; // how many we have left to send
ssize_t n;
while(total < len)
{
n = send(s, buf+total, bytesleft, 0);
//abort();
if (n < 0)
{
return n;
}
total += n;
bytesleft -= n;
}
return total;
}
我查看了显而易见的地方:/ proc / sys / kernel / core_pattern设置正确,如果&#34; // abort();&#34;&#34; // abort();&#34;上面已经注释掉了。
有什么想法吗?我结束了。
答案 0 :(得分:1)
当客户端退出时,服务器程序将终止
n = send(s, buf+total, bytesleft, 0);
这通常是在另一端关闭连接时被SIGPIPE
杀死的结果。有很多方法可以解决这个问题,包括:
setsockopt
与SO_NOSIGPIPE
MSG_NOSIGNAL
用作send
标志SIGPIPE