На некоторых видах прямых соединений из дома на нужные мне сервера NetWeaver я часто сталкиваюсь с ошибкой:
WSAECONNRESET: Connection reset by peer
Она возникает примерно через минуту, если ничего не делать в SAP GUI. Все окна вылетают, блокировки не снимаются, несохранённый результат теряется. Это может быть очень неприятно и обидно.
Кто виноват и что делать?
По моим представлениям корень ошибки находится в сетевом окружении, это такой тайный способ экономить. Поддержание соединения требует ресурсов, если в сети происходит чехарда, то подвисшими соедиениями можно просто забить сеть. Поэтому срабатывает примитивный алгоритм по отстрелу неиспользуемых соединений. Вполне вероятно, что этим занимается мой роутер. Казнить нельзя, помиловать.
В целом, для повседневной работы такое поведение безопасно, так как многие протоколы не парятся по этому поводу, а просто устанавливают соединение заново, или же имеют встроенные команды типа NOOP для создания массовки, пока ничего реального не происходит.
Почему-то такой инструмент как SAP GUI оказывается бессилен перед такой ситуацией. Поглядел в настройки роутера, там не нашел ничего похожего, что помогло бы побороть проблему. Посмотрел в настройки SAP GUI, там тоже не нашел ничего путного.
Попробовал поработать через VPN, но почему-то это мне также не помогло.
Если проблему не выходит решить технологично, то на помощь приходит костыль, неразлучный спутник программиста. В качестве вспомогательного средства я использую простую программку:
PROGRAM z_keepalive.
DO 1000000 TIMES.
cl_progress_indicator=>progress_indicate(
EXPORTING i_text = 'Keeping alive: &1'
i_msgv1 = sy-uzeit ).
WAIT UP TO 10 SECONDS.
ENDDO.
Смысл простой: каждые 10 секунд необходимо слать сигнал по маршруту Сервер=>Клиент, что в некотором роде является эквивалентом команды NOOP. Канал оживляется, и в очередь на отстрел не попадает.
Основные недостатки:
- Дополнительные телодвижения
- Занимает окно
- Не действует на редактор экранов
PS. Между делом похожая напасть может происходить и в SSH.