#c# #.net #sockets #tcp
Вопрос:
У меня есть служба, которая прослушивает SSL-соединения. Недавно возникла проблема, из-за которой цикл TcpListener выглядел так, как будто он перестал выполняться. Мы предполагали, что это как-то связано с SSL-рукопожатием, но оно было полностью зарегистрировано с помощью некоторых журналов catch all, и ничего не было видно. После некоторых изменений и дополнительной регистрации я понимаю, что проблема не в SSL-соединении, а в TcpListern.Метод AcceptSocketAsync. Исключением является
Система.Сеть.Сокеты.Исключение SocketException (10054): Существующее соединение было принудительно закрыто удаленным хостом.
Мой вопрос в том, как можно закрыть соединение во время метода AcceptSocketAsync? Я думал, что TCP-SYN попадет на сервер, и код завершит метод AcceptSocketAsync. Протокол TCP сначала должен включаться только при следующем вызове для отправки ИЛИ получения в этом сокете.
Комментарии:
1. На самом деле tcp-квитирование содержит 3 пакета: клиент:SYN, сервер:SYN ACK, клиент:ACK. Можете ли вы отслеживать соединение с помощью tcpdump, wireshark или чего-то еще в этом роде?
2. Я уже видел несколько случаев с задействованным балансировщиком сетевой нагрузки или дублированием IP-адресов в сети. Инструменты мониторинга сети могут очень помочь.