Я написал это небольшое серверное приложение в чистом C, которое слушает входящие соединения в данном порту, очень простые вещи.
Он идет с обычной процедурой инициализации сокета, создает в порт socket()
, затем bind()
, сообщает его listen()
, и ifinitely проходит через select()
, ожидая входящих соединений с accept()
.
Все идет отлично и работает как шарм, за исключением того, что если я оставлю все, что работает в течение пары месяцев, порт прослушивания закрывается, пока сервер приложений не знает об этом, так как я написал его, чтобы доверять сослужению не закрыть, если не сказать.
Итак, вопрос: почему, черт возьми, порт закрыт без моего заявления и что я могу сделать, чтобы это не произошло?
Это ожидаемое поведение? Должен ли я проверить какие-то исключения или сделать "проверку работоспособности" на прослушивающем сокете, чтобы при необходимости повторно открыть его?
Код: https://gist.github.com/Havenard/e930be035a3bee75c018 (да, я понимаю, что использую 0
как подсказку для ошибок, и это плохая оценка и прочее, но это не относится к вопросу, как я объяснил в комментариях, когда я установил дескриптор файла сокета на 0
, чтобы остановить цикл и закрыть приложение).