P>Наблюдается следующая картинка :
P>я вызвал shutdown и closesocket для всех сокетов, но иногда потоки в которых проходят прослушивание, чтение и запись не завершаются. А завершаться они должны по принципу : возвратилась ошибка, выйти из потока. Видимо не всегда происходят выходы. Забыл я еще упомянуть о факте работы rpc в сервере. Возможно rpc как то влияет и блокирует WSACleanup. Старый добрый MSDN не содержит к сожалению решений подобных ситуаций...
P>Может прибиение rpc как то блокирует сокеты приложения ??? Но почему первый WSACleanup проходит хорошо (он кстати пока не выгружает ws2_32.dll, а только лишь декремент выполняет), а второй блокируется (вот этот и выполняет выгрузку ws2_32.dll). Стоит отметить, что ранее я прибивал потоки через TerminateThread, но потом следуя рекомендации Дж.Рихтера сделал выход из потока внутри через rerurn. Раньше это все работало без rpc. Но пришла беда на нашу землю и .... о чем это я ?
скорее всего ошибка где-то у Вас в приложении
по shutdown() и closesocket() должны вывалится все блокирующие send() и recv()
по closesocket() должны вывалится все блокирующие accept()
дождитесь завершения рабочих потоков WaitForSingleObject() WaitForMultipleObjects()
потом уже закрывайте winsock, лучше это делать не в каждом объекте, все-таки,
хотя если объект статический и живет все время работы программы, то можно.
кстати говоря, не всегда, к примеру, recv() вернет ошибку, может вернуть и EOF
(т.е. return не SOCKET_ERROR а 0 — тоже значит партнер закрылся)