程序在socket :: send之后退出而没有核心文件

时间:2014-05-23 14:43:38

标签: c++ c sockets

这是服务器代码的一部分。当客户端退出时,服务器程序在以下行之后死亡而不进行核对:

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;上面已经注释掉了。

有什么想法吗?我结束了。

1 个答案:

答案 0 :(得分:1)

  

当客户端退出时,服务器程序将终止

n = send(s, buf+total, bytesleft, 0);

这通常是在另一端关闭连接时被SIGPIPE杀死的结果。有很多方法可以解决这个问题,包括:

  • 您可以将setsockoptSO_NOSIGPIPE
  • 一起使用
  • 您可以将MSG_NOSIGNAL用作send标志
  • 您可以忽略SIGPIPE