Проблема с закрытием сокетов. Программа останавливается - PullRequest
1 голос
/ 13 января 2009

У меня возникли проблемы с этим кодом . Проблема в том, что когда я запрашиваю сервер, чтобы отправить мне некоторые данные, а клиент просто отключается, когда сервер пытается отправить мне данные, приложение существует.

Вот строки, которые, я думаю, вызывают проблему

int SendBinary(int *byte, int length)
{
    int bytes_sent;

    bytes_sent = send(connecting_socket, byte, length, 0);

    return bytes_sent;


    return 0;
}

void SendFile(FILE *fp, int file_size)
{
    int current_char = 0;

    do{
        current_char = fgetc(fp);

        if ( current_char == EOF )
            break;

        SendBinary(&current_char, sizeof(char));
    }
    while(current_char != EOF);

}

Какие-нибудь идеи, что я должен сделать, чтобы предотвратить это? Пересмотрите весь источник дополнений к этому фрагменту.

Ответы [ 2 ]

6 голосов
/ 13 января 2009

Возможно, ваше приложение получает SIGPIPE во время записи / отправки и не игнорирует его? Попробуйте проигнорировать этот сигнал или установите для него обработчик бездействия.

0 голосов
/ 13 января 2009

Вы уверены, что клиенту не удалось получить данные с сервера?

  1. telnet на ваш сервер, чтобы увидеть что он посылает в ответ

  2. Замените ваш сервер на netcat чтобы убедиться, что клиент ведет себя правильно

  3. нюхать трафик между сервером и клиент, использующий tcpdump или аналогичный инструмент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...