Я выполняю ссылку beyondtv на xp, подключая к beyondtv хост перспективы. Программа Ссылки зависает приблизительно после 20 минут, и у меня нет никаких, фиксируют для этого. Когда это происходит, с помощью tcpview, я вижу, что хост имеет приблизительно 200 соединений TCP зомби, перенесенных от Канального соединения. Я не могу очистить их, они от того же несуществующего процесса. Соединения бродят вокруг, пока я не перезагружаю хост. Перезагрузка является единственным способом, которым я нашел для повторного подключения Ссылки beyondtv. Я думаю, что существует ошибка в beyondtv, который вызывает это, но я не могу получить ответы на их форумах. Но во всяком случае, я хотел бы знать, существует ли способ уничтожить все те соединения.
Править: это - на самом деле приблизительно 3 000 соединений WAIT_CLOSE, накапливающихся после того, как приблизительно 40 минут, и о затем клиенте умрут. Если я закрываю приложение для сервера, все эти сокеты теперь показывают, как принадлежится - несуществующий процесс в tcpview. Понятный. Но нет ли способ закрыть их без перезагрузки?
Можно использовать Currports Nirsoft, чтобы контролировать и уничтожить соединения.
Можно автоматизировать уничтожение использования шаблона соединения AutoHotKey.
CLOSE_WAIT означает, что соединение было закрыто на другом конце.
Очевидно, beyondtv не обнаруживает это условие и продолжает отправлять данные в приложение на другом конце. Другой конец ничего не может передать обратно по этому соединению, так как это закрыло свой конец соединения.
Решение состоит в том, чтобы установить запись TcpTimedWaitDelay в
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters
Эта запись определяет время, которое должно протечь, прежде чем TCP может выпустить закрытое соединение и снова использовать его ресурсы. Этот интервал между закрытием и выпуском известен как состояние TIME_WAIT или 2MSL состояние. В это время соединение может быть вновь открыто намного по менее стоимости для клиента и сервера, чем установление нового соединения.
По умолчанию на моей машине, это содержит значение-1, который я беру, чтобы означать, что закрытые соединения никогда не выпускаются, который является точно поведением, которое Вы наблюдаете.
Я предполагаю, что Вы устанавливаете значение этой записи в позволенном диапазоне 30–300 секунд. Я предполагаю, что 300 секунд = 5 минут совершенно достаточны для Вашего случая, где требуется 40 минут для выживания компьютера.
Вы можете вызывать Windows к завершению силы все соединения TCP, 1) отключая, затем 2) повторно включая Ваш сетевой интерфейс. Если это работает, Вы можете сценарий пакетной обработки шаги для выполнения при необходимости.
Я ввел по абсолютному адресу вокруг для некоторого способа сделать это через командную строку, от netsh
утилита (или подобный), но у меня не было удачи до сих пор.
Конечно, лучший способ зафиксировать это состоит в том, чтобы исправить поврежденное приложение. Удостоверьтесь, что Вы пробуете последнюю версию приложения; продолжайте прослушивать разработчиков; если Вы уже в последней версии, попытайтесь определить местоположение более старой версии программы.
Вы, вероятно, получаете эти сессии CLOSE_WAIT из-за зависания программы - я не могу сказать, подозреваете ли Вы их как причину, поэтому просто требуемую, чтобы ясно дать понять.
Мое предположение - то, что они не будут бродить вокруг навсегда; вероятно, только в течение 2 часов и 5 секунд. Может походить навсегда, я знаю. Можно попытаться настроиться, KeepAliveTime (вероятно, требует одной заключительной перезагрузки) для сетевого соединения вниз с чем-то маленьким, как 5 минут. Это могло бы помочь им исчезнуть быстрее, после того, как Ваша программа зависает.
Или если Вы знаете, что можно запустить программу надежно в течение, скажем, 10 минут за один раз, Вы могли просто периодически перезапускать ее. Не знайте, полезно ли какое-либо из тех решений для Вашей конкретной ситуации; я соглашаюсь с ~quack, что необходимо угробить проблематичную версию приложения как можно скорее.
Посмотрите, порождает ли beyondtv другой процесс, который содержит открытые соединения. Проводник процесса покажет Вам, если это произойдет.
Действительно ли возможно, что существует проблема брандмауэра? Это могло бы быть незавершенное соединение, которое попробовали и повторенный.
Я отключил бы все брандмауэры на обеих машинах, и если существует маршрутизатор также свой внутренний брандмауэр.
Попробуйте WinSock, который фиксирует XP.
http://www.snapfiles.com/get/winsockxpfix.html
Это повреждает Ваше соединение и сбрасывает его назад для установки по умолчанию. Я всегда сохраняю это на карте флэш-памяти, когда все остальное перестало работать.