Есть крайне примитивный TCP сервер на С. Знаю, что говнокод, реальный код несколько иной, с потоками и парсингом HTTP, но данный тестовый пример неплохо иллюстрирует суть проблемы. Я тестирую его с помощью ab2 (apache benchmark).
Проблема первая. При параметре -с 4 у ab2 (4 параллельных запроса) - первые два запроса обрабатываются практически мгновенно, а вот на третьем очень долго висит recv. Может ли в принципе быть проблема в моем коде, или же виноват ab2, не отправляющий по какой-то причине данные?Проблема втораяРешено. В коде можно заметить обработчик SIGINT, закрывающий socket. Если запустить программу и тут же убить по Ctrl-C, затем запустить снова - все будет работать нормально. Если же послать ей, перед убийством, хотя бы один запрос - при следующем запуске bind ругнется на Address already in use. Разве закрытие слушающего сокета не должно приводить к освобождению адреса?