收到信号:SIGPIPE(断管)

Posted

技术标签:

【中文标题】收到信号:SIGPIPE(断管)【英文标题】:Signal received: SIGPIPE (Broken pipe) 【发布时间】:2013-07-21 07:21:49 【问题描述】:

我正在 C++ 上创建一个简单的客户端/服务器多人游戏。所以客户端连接成功,当我试图发送smth。对此,我从调试器“”收到此消息 代码如下:

服务器:

    string _ip = "127.0.0.1";
    sockaddr_in _tempFullAddress;
    int _templistener;
    int _tempPort;
    int mes = 27;

    _tempFullAddress.sin_family = AF_INET;
    _tempFullAddress.sin_port = 5326;
    inet_aton(_ip.c_str(), &(_tempFullAddress.sin_addr));

    _templistener = socket(AF_INET, SOCK_STREAM, 0);

    int bindResult = 
bind(_templistener, (sockaddr*) &_tempFullAddress, sizeof(_tempFullAddress));
    if (bindResult<0)
        cout<<"Error on binding\n";
        return 0;
    

    listen(_templistener, 1);

    char buf[1];
    buf[0]=(char)mes;

    accept(_templistener, NULL, NULL);
    send(_templistener, buf, 1, 0);

    close(_templistener);

客户:

    sockaddr_in _tempServerAddress;
    int _tempServerPort=5326;
    int _tempSocket;
    char buf[1];
    string _serverIp=""127.0.0.1";

    _tempServerAddress.sin_family=AF_INET;
    _tempServerAddress.sin_port=_tempServerPort;
    inet_aton(_serverIp.c_str(), &(_tempServerAddress.sin_addr));
    _tempSocket=socket(AF_INET, SOCK_STREAM, 0);

    connect(_tempSocket, (sockaddr*)&_tempServerAddress, sizeof(_tempServerAddress));

    recv(_tempSocket, buf, 1, 0);
    _serverPort=5300+((int)buf[0]-'0');

客户端连接成功,但没有收到任何东西。

【问题讨论】:

【参考方案1】:

您无法在侦听套接字上发送数据。 accept 返回一个代表连接的新套接字,然后您在该连接上发送数据。

int _tempconn = accept(_templistener, NULL, NULL);
send(_tempconn, buf, 1, 0);

close(_tempconn);
close(_templistener);

【讨论】:

以上是关于收到信号:SIGPIPE(断管)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的进程总是收到信号 SIGPIPE,然后管道坏了。我在gdb看到的

OpenSSL SSL_shutdown 收到信号 SIGPIPE,Broken pipe

如果前端 Tomcat 被杀死,C++ 服务器将终止。错误“收到未捕获的信号 [13] - SIGPIPE”

如何让MAC屏蔽SIGPIPE信号?

SIGPIPE信号解析

关于SIGPIPE导致的程序退出