Как уничтожить соединения TCP зомби окон?

Я выполняю ссылку beyondtv на xp, подключая к beyondtv хост перспективы. Программа Ссылки зависает приблизительно после 20 минут, и у меня нет никаких, фиксируют для этого. Когда это происходит, с помощью tcpview, я вижу, что хост имеет приблизительно 200 соединений TCP зомби, перенесенных от Канального соединения. Я не могу очистить их, они от того же несуществующего процесса. Соединения бродят вокруг, пока я не перезагружаю хост. Перезагрузка является единственным способом, которым я нашел для повторного подключения Ссылки beyondtv. Я думаю, что существует ошибка в beyondtv, который вызывает это, но я не могу получить ответы на их форумах. Но во всяком случае, я хотел бы знать, существует ли способ уничтожить все те соединения.

Править: это - на самом деле приблизительно 3 000 соединений WAIT_CLOSE, накапливающихся после того, как приблизительно 40 минут, и о затем клиенте умрут. Если я закрываю приложение для сервера, все эти сокеты теперь показывают, как принадлежится - несуществующий процесс в tcpview. Понятный. Но нет ли способ закрыть их без перезагрузки?

11
задан 08.11.2009, 07:58

7 ответов

Можно использовать Currports Nirsoft, чтобы контролировать и уничтожить соединения.

Можно автоматизировать уничтожение использования шаблона соединения AutoHotKey.

10
ответ дан 07.12.2019, 12:17

CLOSE_WAIT означает, что соединение было закрыто на другом конце.

Очевидно, beyondtv не обнаруживает это условие и продолжает отправлять данные в приложение на другом конце. Другой конец ничего не может передать обратно по этому соединению, так как это закрыло свой конец соединения.

Решение состоит в том, чтобы установить запись TcpTimedWaitDelay в

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Эта запись определяет время, которое должно протечь, прежде чем TCP может выпустить закрытое соединение и снова использовать его ресурсы. Этот интервал между закрытием и выпуском известен как состояние TIME_WAIT или 2MSL состояние. В это время соединение может быть вновь открыто намного по менее стоимости для клиента и сервера, чем установление нового соединения.

По умолчанию на моей машине, это содержит значение-1, который я беру, чтобы означать, что закрытые соединения никогда не выпускаются, который является точно поведением, которое Вы наблюдаете.

Я предполагаю, что Вы устанавливаете значение этой записи в позволенном диапазоне 30–300 секунд. Я предполагаю, что 300 секунд = 5 минут совершенно достаточны для Вашего случая, где требуется 40 минут для выживания компьютера.

7
ответ дан 07.12.2019, 12:17

Вы можете вызывать Windows к завершению силы все соединения TCP, 1) отключая, затем 2) повторно включая Ваш сетевой интерфейс. Если это работает, Вы можете сценарий пакетной обработки шаги для выполнения при необходимости.

Я ввел по абсолютному адресу вокруг для некоторого способа сделать это через командную строку, от netsh утилита (или подобный), но у меня не было удачи до сих пор.

Конечно, лучший способ зафиксировать это состоит в том, чтобы исправить поврежденное приложение. Удостоверьтесь, что Вы пробуете последнюю версию приложения; продолжайте прослушивать разработчиков; если Вы уже в последней версии, попытайтесь определить местоположение более старой версии программы.

1
ответ дан 07.12.2019, 12:17
  • 1
    я обновил приложение к последней версии, не помог, и у меня есть запрос в службу поддержки в с ними. Я пытался отключить в сетевых свойствах, и также удаленный в диспетчере устройств, и список соединений WAIT_CLOSE был незатронут. Это - список где-нибудь в ОС, которой я не могу коснуться, это кажется. – P a u l 09.11.2009, 00:16

Вы, вероятно, получаете эти сессии CLOSE_WAIT из-за зависания программы - я не могу сказать, подозреваете ли Вы их как причину, поэтому просто требуемую, чтобы ясно дать понять.

Мое предположение - то, что они не будут бродить вокруг навсегда; вероятно, только в течение 2 часов и 5 секунд. Может походить навсегда, я знаю. Можно попытаться настроиться, KeepAliveTime (вероятно, требует одной заключительной перезагрузки) для сетевого соединения вниз с чем-то маленьким, как 5 минут. Это могло бы помочь им исчезнуть быстрее, после того, как Ваша программа зависает.

Или если Вы знаете, что можно запустить программу надежно в течение, скажем, 10 минут за один раз, Вы могли просто периодически перезапускать ее. Не знайте, полезно ли какое-либо из тех решений для Вашей конкретной ситуации; я соглашаюсь с ~quack, что необходимо угробить проблематичную версию приложения как можно скорее.

1
ответ дан 07.12.2019, 12:17

Посмотрите, порождает ли beyondtv другой процесс, который содержит открытые соединения. Проводник процесса покажет Вам, если это произойдет.

0
ответ дан 07.12.2019, 12:17
  • 1
    я не могу найти дополнительные процессы. При закрытии beyondtv и все, это связало процессы, не имеет никакого эффекта. Эти соединения появляются с <не существующим> для процесса. Процесс вышел, но соединения не закроются. – P a u l 07.11.2009, 08:03

Действительно ли возможно, что существует проблема брандмауэра? Это могло бы быть незавершенное соединение, которое попробовали и повторенный.

Я отключил бы все брандмауэры на обеих машинах, и если существует маршрутизатор также свой внутренний брандмауэр.

0
ответ дан 07.12.2019, 12:17
  • 1
    я также сделал это прежде. Повторно выполнил сценарий, никакой эффект, проблема остается. Я смотрю на linksys маршрутизатор однако, я займусь расследованиями. – P a u l 09.11.2009, 00:13

Попробуйте WinSock, который фиксирует XP.

http://www.snapfiles.com/get/winsockxpfix.html

Это повреждает Ваше соединение и сбрасывает его назад для установки по умолчанию. Я всегда сохраняю это на карте флэш-памяти, когда все остальное перестало работать.

0
ответ дан 07.12.2019, 12:17

Теги

Похожие вопросы