@HamsterGamer

Как с помощью boost::asio связать свою программу только с один портом?

Суть задачи следующая, это одноранговое соединение, по сути существует рой и мне надо подключиться ко всем его участникам. При этом мой порт (который я задам) станет храниться в этом рое вместе с ip адресом, когда я сделаю запрос на получение списка участников из этого роя (я стану таким же участником роя). Но проблема в том, что я не понимаю как можно занять порт еще до подключения, завязать каждый сокет к этим участникам через этот порт, ну и одновременно создать acceptor под этот порт.
Пояснение:
Примерно так я делаю подключение (тут порт (который я хочу связать со своей стороны) не указывается и мне непонятно какой он будет?) :
void client::do_connect(ba::ip::tcp::resolver::iterator endpoint) {
    auto self(Get());
    ba::async_connect(socket_, std::move(endpoint), [this, self](boost::system::error_code ec, [[maybe_unused]] const ba::ip::tcp::resolver::iterator&) {
        if (!ec) {
            ... // полезная работа если подключились
        } else try_again();
    });
    timeout_.expires_from_now(connection_waiting_time + epsilon);
}

После того как я буду подключен, уже ко мне будут обращаться новые участники по тому порту который я указал (когда оформлял запрос в этот рой) и тут понятно на какой порт соединяется сокет.
tcp::endpoint endpoint(tcp::v4(), "2007");
tcp::acceptor acceptor_(io_service, endpoint);
// ...
void Listener::do_accept() {
    acceptor_.async_accept(socket_,
                           [this](boost::system::error_code ec){
       if (!ec) {
           ... // делаем новое соединение с сокетом
       }
       do_accept();
    });
}

Но как я могу сделать так, чтобы всей программой во всех сокетах использовался один и тот же порт? Или в случае с подключением это не имеет никакого значения?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы