У меня есть серверное приложение, работающее на машине Linux. Я могу подключить это приложение с машин Windows / Linux и могу отправлять / получать данные. Через несколько часов что-то происходит, и я получаю следующую ошибку на стороне клиента.
В Windows: An existing connection was forcibly closed by the remote host
В Linux: Connection timed out
Я поискал в Интернете и нашел несколько сообщений, в которых предлагается увеличить / уменьшить время жизни ОС. Однако у меня это не сработало.
Могу ли я найти причину этой проблемы или просто попытаться переподключиться к серверу при принудительном закрытии соединения?
РЕДАКТИРОВАТЬ: Я отслеживал ситуацию. Я отправил данные на удаленный узел и отправил другие данные через 5 часов ожидания. Отправляющая сторона отправила первые данные, но, поскольку отправитель отправил вторые данные, она не ответила. Стек TCP / IP отправителя повторил это 5 раз, увеличивая время между попытками. Наконец, отправитель сбросил соединение. Я не могу понять, почему это происходит (возможно, из-за брандмауэра или NAT - см. Раздел 2.4), но я применил два разных подхода к решению этой проблемы:
- Использование TCP / IP для проверки активности с помощью setsockopt (раздел 4.2)
- Сделайте уровень приложения живым. Это более надежно, поскольку первый подход связан с ОС.