Как установить локальную конечную точку при использовании boost asio udp socket - PullRequest
4 голосов
/ 13 июля 2011

У меня есть 3 сетевых интерфейса на ПК, и я хочу убедиться, что когда я делаю отправку через сокет udp, он отправляет через определенный сетевой интерфейс (у меня есть ip-адрес для использования при отправке данных).

Вот код.

udp::socket send_socket(io_service,boost::asio::ip::udp::v6());
udp::endpoint local_end_point(boost::asio::ip::address::from_string(LocalIpAddress),1111);
//  send_socket.bind(local_end_point);
send_socket.send_to(const_buffer,senderEndpoint,0,error);

Приведенный выше код работает, но я не могу контролировать, через какой сетевой интерфейс будут передаваться данные. Если я раскомментирую строку send_socket.bind, я перестану получать любые данные на другом конце.

Есть ли другой способ привязать сокет к определенному сетевому интерфейсу?

1 Ответ

4 голосов
/ 13 июля 2011

Функция bind() связывает ваш сокет с определенным сетевым интерфейсом для отправки и получения. Если вы перестанете получать данные на другом конце, скорее всего, потому что другой конец не маршрутизируется через сетевой адаптер, указанный вами в вызове bind.

...