Ситуация такая... Для поиска устройств в сети надо просканировать диапазон адресов, например 10.0.0.1 - 10.0.200.255 на предмет подключения по TCP на определенный порт и получения отклика на запрос. Время отклика может достигать 1 сек.
Для решения задачи за разумное время порождаются потоки с не блокирующими сокетами для групп адресов 10.0.0.1 - 10.0.0.255, 10.0.1.1 - 10.0.1.255 и т.д. допустим 50 шт.
Проблема в том что при отсутствии устройства сокет уходит в состояние SYN_SENT на несколько секунд и быстро достигается предел Half-open connections для Windows XP. Т.е. ситуация понятна и прозрачна.
Получается, что если открывается новый сокет - открытие проходит успешно без ошибок, только данные после этого уходят в никуда и без кода ошибки. А т.к. работа ведется через select с таймаутом 1 сек - то непонятно или нет устройства или мы заткнулись на Half-open.
Рассмотрение похожего вопроса в теме
https://forum.shelek.ru/index.php/topic,6663.0.html прочитано и понятно, только ситуация есть...
И вот вопросы к Уважаемым Знатокам:
- Как при открытии нового сокета определить, что достигнут этот "неприятный" предел в 10 подключений?
- Есть ли возможность закрыть состояние SYN_SENT программно или установить свой тайм-аут для этого состояния?
- Может есть еще мысли как ситуацию разрулить?