Получен сигнал: SIGPIPE (сломанная труба)

Я создаю простую многопользовательскую игру клиент/сервер на C++. Итак, клиент успешно подключается, и когда я пытаюсь отправить что-либо. к нему я получаю это сообщение от отладчика "Сигнал получен: SIGPIPE (сломанный канал)" Вот код:

Сервер:

    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');

Клиент успешно подключается, но ничего не получает.


person leoUA    schedule 21.07.2013    source источник


Ответы (1)


Вы не можете отправлять данные на прослушиваемый сокет. accept возвращает новый сокет, представляющий соединение, и вы отправляете данные по этому соединению.

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

close(_tempconn);
close(_templistener);
person Barmar    schedule 21.07.2013