2015-05-22 5 views
1

Я работаю над старым VB6-приложением, которое использует сокеты для связи с различными устройствами. В системе 2012 года мы замечаем время между вызовом winSock.Connect на событие соединения, которое увольняется в течение примерно 9 секунд, через несколько систем в разных доменах. В 2008 R2 или более низкая система, ее 1-3 миллисекунды между вызовом и событием, которое запускается.Открытие гнезда на WIndows 2012 очень медленно

Неужели кто-нибудь сталкивается с этим раньше или имеет какие-либо идеи о том, что может быть причиной этого?

Благодаря

EDIT: Я сделал некоторые слежка с Wireshark и обнаружил, что первые несколько TCP передачи не подсоединили и быть переданы повторно, не уверен, если это поможет

ответ

0

В итоге я нашел ответ на этот вопрос после некоторого обширного рытья.

Начиная с Windows Server 2012, Microsoft включила расширение TCP, называемое явным уведомлением о перегрузке (ECN). Это позволяет сквозное уведомление о перегрузке сети с потерей пакетов. Способ, которым это разрешено в TCP-пакете, осуществляется через флаг, который определен в определении ECN (RFC 3168 (2001)).

Что для меня было причиной того, что устройства, к которым относится мое приложение, являются старше и не поддерживают флаг ECN. Когда они получили пакеты с включенным флагом, они не подтвердят передачу, что приведет к таймауту с сервера. После двух неудачных передач похоже, что Windows отключает флаг ECN, и устройство подтвердило пакеты.

Я отключил ECN, выполнив следующую команду из командной строки Администратор:

netsh interface tcp set global ecncapability=disabled 
0

Там нет ничего особенно «специальная «о контроле Winsock, который представляет собой лишь тонкую оболочку поверх API. Единственное, что нужно отметить, это то, что он 32-битный и должен работать внутри WOW64.

Возможно, что вы делаете что-то смешное или все 32-битные программы, использующие API winsock, одинаково должны увидеть ту же проблему.

Возможно, у вас есть проблема с разрешением имен на этом сервере?

+1

Я создал несколько тестовых приложений, которые также отображающие один и тот же вопрос. Это не проблема разрешения имен, я использую IP-адреса для подключения. Это также происходит на разных сайтах (сайт клиентов и внутреннее воспроизведение) –