Есть проблема: Программа работает с большим количеством клиентов и выделяет большое количество портов. Для каждого клиента выделяется один порт. Как узнать какие порты свободны, а какие нет. Программа многопоточная.
Подобный подход в корне не верен. Необходимо идти от резервирования. Администратор сервера в настройках указывает сами порты, перечисляя их или указывая диапазон.
Например, Ports = 4560, 4480, 8560 Ports = 4560-5580
Сервис же должен работать в пределах указанного диапазона.
Почему так лучше? На сервере могут быть установлены другие сервисы. В случае безконтрольного захвата портов не исключены конфликтные ситуации, которые решить никак не удастся.
плохая это идея - узнавать, какие порты открытые. Это не даст ничего. Если программа многопоточная, то порты могут постоянно выделятся новые, старые закрываться.
Скорее всего Вам просто нужно создать сокет на свободном порту. Для этого при вызове listen задается 0 порт. Система автоматически найдет доступный порт и выделит его. А какое именно у него значение - это можно узнать позже с помощью getsockname.
ClientSocket1->Port = твое значение;
ClientSocket2->Port = твое значение;
ClientSocket3->Port = твое значение;
.
.
.
ClientSocketN->Port = твое значение;
Далее проверка активности порта:
if (ClientSocket1->Active == true) {
[...ЧТО ТЕБЕ НУЖНО...]
}
Продвижение своими сайтами как стратегия роста и независимости