WSAEADDRINUSE (10048) на connect()

Тема в разделе "WASM.NETWORKS", создана пользователем ECk, 22 фев 2007.

  1. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    День добрый всем!
    Не знает ли случайно кто-нибудь, чем можно отменить ожидание таймаута после закрытия порта? (Открывается в течении короткого времени несколько сот коннектов, закрываются, после завершения свободных портов в диапазоне 1024-5000 - по дефолту так в ХР - сокеты создаются корректно, но при вызове connect() винсок пишет "Адрес используется").
    Курение МСДН не катит (shudwodn с SD_SEND и recv() в цикле после него пробовал, эффект тот же).
    Можно конечно в реестре, в HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort:lol: WORD поставить 32768 - тогда все успевает корректно завершиться, но это частный случай решения проблемы, нет ли у кого нибудь на примете других способов для этого?
     
  2. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Вот точно - одно слово Мелкософт:
    To avoid this situation, applications should ensure a graceful shutdown themselves by calling shutdown with the SD_SEND flag and waiting in a recv loop until zero bytes are returned. Not only does this avoid the problem with port reuse, but it also guarantees all data has been received by the peer as well as confirming to the peer that all of its data was successfully received.
    http://blogs.msdn.com/wndp/archive/2005/08/03/Anthony-Jones.aspx

    Слов добрых не хватает на таких идиотов (SD_SEND никак не относится к recv в цикле, с точки зрения здравого смысла). Поставил SD_RECEIVE - и все сразу стало как надо :)
    Пашет и порты освобождаются гораздо раньше чем 4 минуты