________________________________________________
| Инициализация локальных переменных |
| Разбор аргументов командной строки |
| Резолв хостнеймов в inet-структуры |
| Запуск слушающего сервера |
| Конфигурация поллера |
| Установка обработчиков сигналов процессу |
------------------------------------------------
_________________________|______________________
| Логирование старта работы |
------------------------------------------------
|
|<---------------------------------.
________________________|_______________________ |
/ Цикл / |
------------------------------------------------ |
_________________________|______________________ |
| Ожидание событий от поллера | |
------------------------------------------------ |
| |
.---------------------------->| |
| ________________________|_______________________ |
| / Для каждого файлового дескриптора с событиями / |
| ------------------------------------------------ |
| ________________________|______________________ |
| | Если тип события: | |
| | - Подключение нового клиента ------------------|--. |
| | - Данные от клиента ---------------------------|--|--. |
| | - Данные от сервера ---------------------------|--|--|--. |
| | - События закончились -------------------------|--|--|--|--`
| ________________________________________________| | | |
| | | |
^ ________________________________________________ | | |
| | Принять подключение |<-' | |
'---| Проинициалзировать контекст клиента | | |
^ ------------------------------------------------ | |
| ________________________________________________ | |
'---| Вычитать HTTP-заголовки |<----' |
^ | Добавить заголовок с именем пользователя | |
| | Вычитать тело | |
| ------------------------------------------------ |
| ________________________________________________ |
'---| Вычитать ответ сервера |<-------'
| Передать ответ запросившему его клиенту |
| Закрыть дескрипторы сервера и клиента |
| Удалить закрытые дескрипторы из поллера |
------------------------------------------------
В случае получения сигнала SIGINT или SIGTERM, логируется завершение работы