boost :: asio - разъяснение о привязке к определенному сетевому интерфейсу - PullRequest
5 голосов
/ 26 августа 2010

Я искал ответы в сети, но не могу найти полный ответ.

Сценарий: у меня есть клиентский API и сервер. Приложение использует клиентский API для связи с сервером. Как TCP, так и UDP используются для связи между клиентским API и сервером. Все это было написано с использованием ASIO.

Клиентский API подключается к серверу по TCP, затем отправляет команды по TCP и получает ответы по TCP. Клиентский API также прослушивает UDP-адрес, по которому он непрерывно получает данные в реальном времени.

Среда представляет собой смесь машин, работающих под управлением WIN32 и WIN64. Все машины также имеют 2 сетевые карты.

Вопрос: Я хотел бы иметь возможность «закрепить» мои TCP и UDP-соединения на определенных локальных сетевых интерфейсах. Я видел некоторую информацию, которая обсуждает опцию сокета SO_BINDTODEVICE, а также функцию связывания из предыдущих постов или других сайтов.

Возможно ли это сделать в среде WIN32 / 64? Если бы вы могли пролить некоторый свет на это, некоторые примеры или полезные сайты, я был бы очень благодарен

Ссылки, которые я нашел:

  1. Используя Linux, как указать, какие данные интерфейса Ethernet передаются по
  2. http://tuxology.net/2008/05/15/forcing-connections-through-a-specific-interface/

1 Ответ

8 голосов
/ 26 августа 2010

Вы можете привязать к определенной конечной точке, используя соответствующий tcp::ip::acceptor конструктор

include <boost/asio.hpp>

int
main()
{
    using namespace boost::asio;
    io_service service;
    ip::tcp::endpoint ep(
            ip::address::from_string( "127.0.0.1" ),
            1234
            );
    ip::tcp::acceptor acceptor( 
            service,
            ep
            );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...