Закрытие сокетов

Тема в разделе "WASM.NETWORKS", создана пользователем ZX_CodeR, 5 июн 2008.

  1. ZX_CodeR

    ZX_CodeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2007
    Сообщения:
    48
    Доброго времени суток всем !

    Вобщем проблема такая .... Пишу многопоточное приложение которое в каждом своем треде создает сетевое соединение .... и отработав поток закрывает его ....
    в течение минуты может быть открыто очень много потоков ..........

    наблюдаю весь процесс в tcpview
    проблема в следущем ..... после вызова функции closesocket в треде ....
    конект переходит из контекста моего процесса в контекст процесса System и после некоторого времени закрывается ..... тоесть при интенсивной работе программы накопояетсо огромное кол-во сетевых соединений в System и винда уходит в бсод (((

    вот примерно какие записи появляютсо в tcpview

    [System Process]:0 TCP main:3075 zx-coder.org:ftp TIME_WAIT

    Как решить эту проблему ??? Возможно надо установить какие нить опции для сокета ???
     
  2. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Сокеты TCP? Если на сервере - то делаешь серверным сокетам
    Код (Text):
    1. setsockopt(SO_REUSEADDR)
    Если же на уровне самой винды - то сделай



    Код (Text):
    1. System Key: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
    2. Value Name: TcpTimedWaitDelay
    3. Data Type: REG_DWORD (DWORD Value)
    4. Value Data: 30-300 seconds (decimal)
    Офф:Кстати, может кто знает как программно увеличить число клиентских TCP сокетов, которые отправили SYN, но еще не получили SYN/ACK??
     
  3. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    с TIME_WAIT бороться не надо - это нормальное состояние, в которое попадает соединение, если вы закрываете его по собственной инициативе. В этом состоянии оно прибывает около минуты. SO_REUSEADDR - тут не поможет, состояние TIME_WAIT останется. А вот почему возникает BSOD - не понятно, попробуйте проанализировать креш дамп. У вас нет какого нибудь фаервола? Посмотрите в диспетчере, что происходит с NonPaged пулом. Винда тут не причем ( не совсем ), это какой то драйвер косячит, возможно, из-за нехватки памяти.

    Если все таки хочется побороться, рвите соединение: перед вызовом closesocket настройте LINGER ( setsockopt - SO_LINGER ) .
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    ZX_CodeR
    Хэндлы тредов ты всё-таки пробовал закрывать?
     
  5. ZX_CodeR

    ZX_CodeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2007
    Сообщения:
    48
    Спасибо всем за ответы ....
    lingering close помоголо

    исчерпывающая информация находится здесь
    http://www.kalinin.ru/programming/network/29_10_00.shtml