У меня проблемы с этот код. Проблема в том, что когда я запрашиваю сервер, чтобы он отправил мне некоторые данные, а клиент просто отключается, когда сервер пытается отправить мне данные, приложение существует.
Вот строки, которые, как мне кажется, вызывают проблему
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(¤t_char, sizeof(char));
}
while(current_char != EOF);
}
Есть идеи, что мне делать, чтобы предотвратить это? Пересмотрите весь исходный код на предмет дополнений к этому фрагменту.
Нет, это не segfault, просто завершается без сообщений.
Никогда не используйте sizeof (char). Он определен как 1, поэтому он только добавляет путаницы в код. Кроме того, ваш код, скорее всего, сломан, поскольку он считывает char в int, а затем передает указатель на этот int функции (send ()), ожидающей указателя на байты.
send ожидает пустого *. И sizeof (char) зависит от системы. конечно, в данном случае его Unix, где он 1. НО это хорошая практика.





Возможно, ваше приложение получает SIGPIPE во время записи / отправки и не игнорирует его? Попробуйте проигнорировать этот сигнал или установить для него бездействующий обработчик.
Как это? сигнал (SIGPIPE, SIG_IGN);
Работает как шарм. Как бы на самом деле справиться с SIGPIPE?
Почти каждая программа игнорирует SIGPIPE. Вы узнаете, что это произошло при сбое функции write () или send (), правильно проверив возвращенные коды ошибок.
Хороший способ обнаружить ошибки и сбои, связанные с подобными вещами, - это запустить strace в вашей программе. Я не могу сосчитать, сколько раз Strace спасал мне жизнь.
Вы уверены, что клиент не отказал при получении данных с сервера?
telnet на ваш сервер, чтобы увидеть
что он отправляет в ответ
Замените свой сервер на
netcat, чтобы убедиться, что клиент
вести себя правильно
Понюхать трафик между сервером и
клиент, использующий tcpdump или аналогичный
инструмент
Клиент - это Chrome и IE, поскольку это веб-сервер. В случае с Chrome он должен вести себя хорошо, но с IE никогда не знаешь;)
Здесь не так много информации. Как сервер выходит? Если это segfault, использовали ли вы отладчик, чтобы определить, где возникает ошибка?