2011-07-11 21 views
5

Estoy tratando de crear un cliente HTTP usando Boost Asio. Copié el ejemplo del cliente de sincronización de asio, compilo y luego funcioné. Lamentablemente, en mis registros, muestra Servicio no encontrado. Cuando tracé el código, me pareció que se lanza desde el siguiente código:Boost Asio tcp :: resolver: servicio no encontrado

boost::asio::io_service io_service; 
// Get a list of endpoints corresponding to the server name. 
tcp::resolver resolver(io_service); 
//->if i removed the http, it has no error 
tcp::resolver::query query("host.com", "http"); 
//->This part throws the service not found 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
tcp::resolver::iterator end; 

¿Alguien puede explicar por qué se está lanzando un servicio que no se encuentra o sobre cómo puedo solucionar esto?

Respuesta

6

Esto significa que el sistema operativo no sabe qué número de puerto corresponde al servicio TCP con el nombre "http".

En un sistema operativo tipo Unix, esto significa que la línea http 80/tcp falta en /etc/services, puedo reproducir el error en Linux comentando esa línea.

Si el sistema operativo no puede ser configurada para utilizar los servicios, es posible utilizar cualquier servicio "" en el sistema de resolución, y especificar el número de puerto explícitamente al crear el objeto de punto final para la llamada connect:

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80); 
boost::system::error_code ec; 
socket.connect(connectionEndpoint, ec); 
+0

gracias por su respuesta . Lo probaré cuando regrese al trabajo. Gracias. – neztreh

+2

También puede dar el número de puerto como una cadena, p. consulta ("host.com", "80") –

Cuestiones relacionadas