В настоящее время я пытаюсь реализовать свой собственный веб-сервер на C ++ - не для продуктивного использования, а для обучения.
Я в основном открываю сокет, слушаю, жду соединения и открываю новый сокет, из которого япрочитайте данные, отправленные клиентом.Все идет нормально.Но как я узнаю, что клиент закончил отправку данных, а не просто временно прекратил отправлять больше по какой-то другой причине?
Мой текущий пример: когда клиент отправляет POST-запрос, он сначала отправляет заголовки, затемдва раза "\ r \ n" подряд и затем тело запроса.Иногда тело не содержит никаких данных.Так что, если клиент временно не может отправить что-либо после отправки заголовков - как мне узнать, что он еще не завершил свой запрос?
Это зависит исключительно от используемого протокола (HTTP), и это мойзадача выяснить это на основе данных, которые я получил, или есть что-то вроде EOF для сокетов?
Если я не могу получить необходимую информацию из сокета, как я могу защитить свою программу от неисправных клиентов?(Что, я полагаю, я должен сделать независимо от этого, так как это может быть злоумышленник, а не неисправный клиент, отправляющий неверные данные.) Это мой единственный вариант - продолжать чтение до тех пор, пока запрос не будет завершен по определению протокола или по таймауту (определяетсяя) достигнут?
Надеюсь, это имеет смысл.
Кстати: пожалуйста, не говорите мне использовать какую-то библиотеку - я хочу изучить основы.