Почему клиенты возвращают ему сообщение веб-сервера? - PullRequest
0 голосов
/ 30 апреля 2018

Я сделал простой веб-сервер с сокетом Linux и наблюдал за его http-трафиком. Часто, когда он отправляет HTTP 200 или 404 обратно запрашивающему клиенту GET или POST (веб-браузер или сканер), клиент возвращает сообщение, только что отправленное ему сервером. Почему они так себя ведут и какого ответа ждут от моего сервера?

новое соединение 0 установлено с 37.236.190.20:39889

новое сообщение 0 получено от 37.236.190.20:39889

GET / HTTP / 1.1 Подключение: Keep-Alive Keep-Alive: 300 Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHT ML, как Gecko) Chrome / 63.0.3239.132 Safari / 537.36 Хост: 18.231.188.211

успешно отправил файл login.html на 0 37.236.190.20:39889 | nsent = 550

новое сообщение 0 получено от 37.236.190.20:39889

HTTP / 1.1 200 OK Подключение: закрыть Длина контента: 465 Тип контента: текст / html

[HTML-страница, которую я отправил сюда]

успешно отправил файл login.html на 0 37.236.190.20:39889 | nsent = 550

соединение 0 с 37.236.190.20:39889 было принудительно закрыто. причина: эхо

1 Ответ

0 голосов
/ 01 мая 2018

Так как я нигде не нашел ни одной записи такого поведения, с помощью gdb я обнаружил, что использую переменную без знака для хранения возвращаемого значения функции, которая при ошибке возвращает -1.

msg_buffer.length = recv(connected[i].socket, msg_buffer.data, msg_buffer.size, 0);
if (msg_buffer.length < 0) { // no message

Таким образом, оценка во второй строке никогда не будет истинной, а длина сообщения будет 0xffffffffffffffff. Но поскольку буфер содержал мое ранее отправленное сообщение, и не было получено никакого нового сообщения для его перезаписи, оказалось, что клиенты повторяли мой сервер. Спасибо всем за помощь. И извините за ошибку.

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