У меня есть клиент-серверное приложение для написания приложений на С# .NET с использованием сокетов.
Я часто получаю сообщения журнала (скажем, около 4 в час), говорящие это сообщение,
An existing connection was forcibly closed by the remote host
В данном случае ошибка возникает на стороне «сервера».
Я решил использовать wireshark для анализа происходящего, и у меня это получилось. Никаких задержек, это все происходит в течение пары секунд.
Server > Client [PSH, ACK] Seq=55653 Ack=4472 Win=63940 Len=148
Client > Server [ACK] Seq=4472 Ack=55801 Win=4038 Len=0
Server > Client [PSH, ACK] Seq=55801 Ack=4472 Win=63940 Len=148
Client > Server [ACK] Seq=4472 Ack=55949 Win=4001 Len=0
Server > Client [PSH, ACK] Seq=55949 Ack=4472 Win=63940 Len=142
Client > Server [PSH, ACK] Seq=4472 Ack=55949 Win=4001 Len=31
Client > Server [RST, ACK] Seq=4503 Ack=55949 Win=0 Len=0
Таким образом, клиент и сервер отправляют данные между собой (PSH) и подтверждают данные (ACK). Внезапно происходит RST. Согласно википедии, это сброс, и этот сброс соответствует сообщению «Существующее соединение было принудительно…», которое я получаю выше.
Что это на самом деле означает? Означает ли это, что сброс вызывает проблему? Я думаю, что ответ на этот вопрос — нет, и что имеет больше смысла, так это то, что сброс является результатом проблемы? т.е. Сокет на стороне сервера по какой-то причине умирает, и клиент отправляет сброс на сервер, чтобы попытаться разбудить его.
Мысли?