Tcp в linux, программирование на с++

300
19 декабря 2016, 20:00

Есть проблема: Программа работает с большим количеством клиентов и выделяет большое количество портов. Для каждого клиента выделяется один порт. Как узнать какие порты свободны, а какие нет. Программа многопоточная.

Answer 1

Подобный подход в корне не верен. Необходимо идти от резервирования. Администратор сервера в настройках указывает сами порты, перечисляя их или указывая диапазон.

Например, Ports = 4560, 4480, 8560 Ports = 4560-5580

Сервис же должен работать в пределах указанного диапазона.

Почему так лучше? На сервере могут быть установлены другие сервисы. В случае безконтрольного захвата портов не исключены конфликтные ситуации, которые решить никак не удастся.

Answer 2

плохая это идея - узнавать, какие порты открытые. Это не даст ничего. Если программа многопоточная, то порты могут постоянно выделятся новые, старые закрываться.

Скорее всего Вам просто нужно создать сокет на свободном порту. Для этого при вызове listen задается 0 порт. Система автоматически найдет доступный порт и выделит его. А какое именно у него значение - это можно узнать позже с помощью getsockname.

Answer 3
ClientSocket1->Port = твое значение;
ClientSocket2->Port = твое значение;
ClientSocket3->Port = твое значение;
.
.
.
ClientSocketN->Port = твое значение;

Далее проверка активности порта:

if (ClientSocket1->Active == true) {
[...ЧТО ТЕБЕ НУЖНО...]
}
READ ALSO
Перевод с Delphi на C++/FASM

Перевод с Delphi на C++/FASM

Ищу перевод данной команды на язык С++ и FASM

287
Operator> работает через раз

Operator> работает через раз

У меня есть класс Lint "длинное целое число", вмещающее в себя целое число любой длиныХранит он его в виде массива char, в каждом элементе массива...

335
Гиперссылка в встроенном webBrowser

Гиперссылка в встроенном webBrowser

приветствую! ) Задача следующая: в программе (на visual C++ 2008) встроен веб-браузер, он используется для вывода информации (таблиц)Я хочу вывести...

314
Как исправить ошибку: error expected expression before

Как исправить ошибку: error expected expression before

Не обломался и вчитался :)

859