Во-первых, можно сломать select
, используя фиктивный сокет (например, сокет UDP, подключенный к себе), хотя это может быть дорогостоящим в вашем случае.
Если у вас есть окно, которое может обрабатыватьвокруг сообщений, вы можете использовать WSAAsyncSelect
для получения асинхронных уведомлений для connect
.(обратите внимание, что это также автоматически делает ваш сокет неблокирующим, что требует другого вызова WSAAsyncSelect
и вызова ioctlsocket
для отключения).
В отсутствие этого вы можете использовать WSAEventSelect
, хотя вы обнаружите, что это ограничивает вас до 64 сокетов за ожидание (так как это верхний предел для WaitForMultipleObjects
).Это также сделает ваш сокет неблокирующим, что вы можете отменить аналогично тому, что сделано для WSAAsyncSelect
.
(В качестве полной примечания вы можете увеличить количество обработанных сокетов на select
наопределение FD_SETSIZE
перед включением winsock2.h
)