Доброго времени суток всем ! Вобщем проблема такая .... Пишу многопоточное приложение которое в каждом своем треде создает сетевое соединение .... и отработав поток закрывает его .... в течение минуты может быть открыто очень много потоков .......... наблюдаю весь процесс в tcpview проблема в следущем ..... после вызова функции closesocket в треде .... конект переходит из контекста моего процесса в контекст процесса System и после некоторого времени закрывается ..... тоесть при интенсивной работе программы накопояетсо огромное кол-во сетевых соединений в System и винда уходит в бсод ((( вот примерно какие записи появляютсо в tcpview [System Process]:0 TCP main:3075 zx-coder.org:ftp TIME_WAIT Как решить эту проблему ??? Возможно надо установить какие нить опции для сокета ???
Сокеты TCP? Если на сервере - то делаешь серверным сокетам Код (Text): setsockopt(SO_REUSEADDR) Если же на уровне самой винды - то сделай Код (Text): System Key: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] Value Name: TcpTimedWaitDelay Data Type: REG_DWORD (DWORD Value) Value Data: 30-300 seconds (decimal) Офф:Кстати, может кто знает как программно увеличить число клиентских TCP сокетов, которые отправили SYN, но еще не получили SYN/ACK??
с TIME_WAIT бороться не надо - это нормальное состояние, в которое попадает соединение, если вы закрываете его по собственной инициативе. В этом состоянии оно прибывает около минуты. SO_REUSEADDR - тут не поможет, состояние TIME_WAIT останется. А вот почему возникает BSOD - не понятно, попробуйте проанализировать креш дамп. У вас нет какого нибудь фаервола? Посмотрите в диспетчере, что происходит с NonPaged пулом. Винда тут не причем ( не совсем ), это какой то драйвер косячит, возможно, из-за нехватки памяти. Если все таки хочется побороться, рвите соединение: перед вызовом closesocket настройте LINGER ( setsockopt - SO_LINGER ) .
Спасибо всем за ответы .... lingering close помоголо исчерпывающая информация находится здесь http://www.kalinin.ru/programming/network/29_10_00.shtml