TCP Socket.Connect генерирует ложные срабатывания - PullRequest
2 голосов
/ 07 апреля 2009

Я испытываю очень странное поведение с методом Socket.Connect в C #. Я пытаюсь установить TCP Socket.Connect на действительный IP-адрес, но закрытый порт, и метод продолжается, как будто я успешно подключился. Когда я проанализировал, что происходит, я увидел, что приложение получало RST-пакеты с удаленной машины. Тем не менее из имеющейся трассировки ясно, что метод connect не вызывает исключение. Есть идеи, что может быть причиной этого?

Код, который работает в основном это

IPEndPoint iep = 
    new IPEndPoint(System.Net.IPAddress.Parse(m_ipAddress), m_port);
Socket tcpSocket = new Socket(AddressFamily.InterNetwork, 
    SocketType.Stream, ProtocolType.Tcp);
tcpSocket.Connect(iep);

Чтобы добавить к тайне ... при запуске этого кода в автономном консольном приложении, результат, как и ожидалось - метод connect вызывает исключение. Однако при запуске его в развертывании службы Windows у нас метод connect не выдает исключение.

Редактировать в ответ на ответ Мистера Мана Как проглотить исключение? У меня есть Trace.WriteLine прямо над методом .Connect и Trace.WriteLine прямо под ним (не показано в примере кода для удобства чтения). Я знаю, что оба следа работают. У меня также есть попытка поймать все это, что также делает Trace.Writeline, и я не вижу этого нигде в файлах журнала. Я также включил внутреннюю трассировку сокетов, как вы предложили. Я не вижу никаких исключений. Я вижу то, что, кажется, успешные связи.

Я пытаюсь определить различия между приложением службы Windows и приложением консоли диагностики, которое я сделал. У меня заканчиваются идеи, хотя

Конец редактирования

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 апреля 2009

Вы уверены, что исключение не перехватывается и не проглатывается в службе, но не в консольном приложении?

Моим первым шагом было бы выделить различия между двумя реализациями. Вы упоминаете трассировку, но не говорите, является ли это трассировкой сети (частью BCL) или вашей собственной трассировкой. Если вы не используете трассировку сети, включите ее.

1 голос
/ 23 сентября 2010

см. AppDomain.CurrentDomain.UnhandledException

0 голосов
/ 16 сентября 2009

Я никогда не наблюдал это снова. Мне кажется, что-то где-то было повреждено. Либо ОС, в которой было установлено приложение, либо .NET Framework.

...