C# Все сокеты отключаются

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

Мое приложение имеет несколько сокетов (http, ftp и т. д.) и будет работать некоторое время, хотя в какой-то момент (несколько детерминированный) все сокеты отключатся (я вижу это через ProcMon).

Я получаю ужасное исключение Exception: An established connection was aborted by the software in your host machine. Затем, если я попытаюсь снова открыть сокет(ы), я получу сообщение об ошибке, говорящее, что WSAStartup, возможно, не был вызван.

Какие инструменты или методы я могу использовать для устранения такой проблемы?


person Ternary    schedule 11.03.2014    source источник
comment
Я полагаю, вы уже попробовали это с полностью отключенным брандмауэром и антивирусным программным обеспечением?   -  person George    schedule 11.03.2014
comment
Отличный момент, я должен был отметить, что я считаю, что исключил это.   -  person Ternary    schedule 11.03.2014
comment
Подключаются ли эти сокеты к удаленным машинам или локальному хосту? Это происходит на разных машинах или это может быть аппаратная или программная проблема на вашей тестовой машине? Страдают ли от этого другие приложения? Это происходит и для тестовой программы, использующей один сокет? Когда это происходит, через несколько фиксированный период времени, количество подключений или объем переданных данных?   -  person CodeCaster    schedule 11.03.2014
comment
Спасибо всем за советы, я смог решить эту проблему. Я вызывал WSAStartup и WSACleanup нечетное количество раз. Когда срабатывает дополнительный WSACleanup, он закрывает все сокеты во всех потоках приложения (согласно документации MSDN). Я добавил простой статический счетчик вокруг каждого запуска (++) и все вызывали очистку, если счетчик был >0. Проблема решена. Будет ли это лучше всего закрыто или прикреплено к возможному дубликату?   -  person Ternary    schedule 18.03.2014
comment
@Ternary Вопрос был очень похож на дубликат, но он больше не кажется дублированным - я предлагаю вам переместить комментарий, который вы вставили, в ответ и пометить его как ответ на ваш вопрос. это совершенно нормально, чтобы ответить на свой вопрос.   -  person G.Y    schedule 19.03.2014


Ответы (1)


По предложению я публикую это как ответ.

Спасибо всем за советы, я смог решить эту проблему. Я звонил WSAStartup и WSACleanup нечетное количество раз. Когда попадает дополнительный WSACleanup, он закрывает все сокеты во всех потоках приложения (см. документация MSDN).

В многопоточной среде WSACleanup завершает операции Windows Sockets для всех потоков.

Я добавил простой статический счетчик вокруг каждого запуска (++) и все вызывал очистку, если счетчик был> 0. Проблема решена.

Надеюсь, это поможет другим.

person Ternary    schedule 19.03.2014