2010-08-25 6 views
5

He estado buscando en la red las respuestas, pero parece que no puedo encontrar una respuesta completa.boost :: asio - Aclaración sobre la vinculación a una interfaz de red específica

Escenario: Tengo una API cliente y un servidor. Una aplicación usa la API del cliente para hablar con el servidor. Tanto TCP como UDP se usan para comunicarse entre la API del cliente y el servidor. Todo esto ha sido escrito usando ASIO.

La API del cliente se conecta al servidor a través de TCP, luego envía comandos a través de TCP y recibe respuestas a través de TCP. La API del cliente también escucha una dirección UDP donde recibe datos en tiempo real continuamente.

El entorno es una combinación de máquinas que ejecutan WIN32 y WIN64. Todas las máquinas también tienen 2 tarjetas de red.

Pregunta: Me gustaría poder 'anclar' mis conexiones TCP y UDP a interfaces de red local específicas. He visto información que analiza la opción de socket SO_BINDTODEVICE, así como la función de enlace de publicaciones anteriores u otros sitios.

¿Es posible hacer esto en el entorno WIN32/64? Si pudiera arrojar algo de luz sobre esto, algunos ejemplos o sitios que son útiles, realmente lo agradecería.

enlaces que he encontrado:

  1. Using Linux, how to specify which ethernet interface data is transmitted on
  2. http://tuxology.net/2008/05/15/forcing-connections-through-a-specific-interface/
+0

no era obvio para mí si has intentado atar tu 'accepto r' objeta un 'punto final' específico usando uno de los constructores sobrecargados. ¿Has probado eso? –

+0

Sam - No he probado el constructor sobrecargado. Trataré de hacerlo esta noche y te lo haré saber. Parece que debería hacer el truco para un servidor tcp. Espero hacer esto para un cliente tcp, un cliente udp y un servidor udp también. Si son posibles ¿Puedo usar el método bind en ellos también? Gracias, publicaremos el resultado. – skimobear

+0

He publicado una respuesta a continuación con un código de muestra, pruébalo y avísame. –

Respuesta

8

Usted puede unirse a un punto final concreto utilizando la apropiada tcp::ip::acceptorconstructor

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 
      ); 
} 
+0

Sam, lo probé y funciona perfectamente. Gracias. – skimobear

Cuestiones relacionadas