Здравствуйте!
Вопрос такой: имеется приложение-сервер, слушает сетевые запросы с помощью сокета. Сокет создается (socket), привязывается к хосту и порту (bind), включается прослушка (listen) и отменяется блокирование (через fcntl ставится O_NONBLOCK), чтобы accept в случае отсутствия запросов не блокировал работу приложения (есть работа кроме слушания).
Соответственно, при подключении клиента создается новый сокет, из него чего-то читается, в него чего-то пишется, потом он закрывается. На стороне сервера. Чтобы клиент не ждал вечно новых сообщений от сервера, мне приходится делать shutdown для сокета - это нормально? Пробовал от сервера слать EOF, закрывать close'ом - клиент все равно ждал до бесконечности.
Далее. Когда я прибиваю сервер и пытаюсь запустить его по новой, bind отваливается с кодом ошибки EINVAL (в руководстве расшифровка - "сокет уже привязан к этому адресу"). Если подождать некоторое время, то вновь становится возможным запускать сервер на тот же хост/порт.
Прибиваю сервер я сигналом SIG_TERM, а обработчик написать поленился и, соответственно, close для сокета не делаю. Проблема в этом? Разве при завершении процесса его ресурсы не должны освобождаться сами?