Pregunta

Estoy tratando de crear algo similar a este código encontrar en los ejemplos boost.asio.

socket.h:

class some_class {
private:
    ...
        boost::asio::io_service io_service;
public:
        some_class() {
             /* This stuff isn't used in the example...
               ...but it doesn't change anything... */
             io_service.run();
        }
};

socket.cpp:

using boost::asio::ip::tcp;

bool some_class::connect(char* host, char* port) 
{
    printf("Resolving hostname...\n");

    /* Resolve hostname. */
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(tcp::v4(), host, port);
    tcp::resolver::iterator iterator = resolver.resolve(query);

    printf("Connecting to %s:%s... ", host, port);

    /* Connect to resolved hosts. */
    sock->connect(*iterator);

    return true;
}

g ++ construye esto sin ningún error, pero el código no hace más allá de la llamada resolver.resolve ().
He intentado tanto "127.0.0.1" y "localhost" para el host y "80" para el puerto. (No creo que debería importar, pero apache2 está en funcionamiento)

Cuando Ctrl + C de mi solicitud, es obvio que termina pero sí la salida de "Conexión a cadena" justo antes de que lo hace.

Estoy pensando en construir el ejemplo a mí mismo y ver si se produce el mismo problema, y, sin duda publicar los resultados aquí. ¿Alguien ha encontrado este problema o sabe lo que podría causar este comportamiento?

editar:
El ejemplo se ejecuta muy bien ... tengo algo de depuración que hacer, supongo.

segunda edición:
Yo no lo entiendo, la única cosa que podría ser diferente es host / puerto.
Ejemplos de uso char * argv [] y estoy usando:

char host[] = "localhost";
char port[] = "80";

tercera edición:
De hecho, parece ser el bloqueo en conexión, se olvidó de fflush (stdout). entonces tiene que haber un problema con la toma de corriente. vamos a hacer algunas pruebas más.

cuarta edición:
estúpida de mí, no estaba bloqueando a todos! Estaba depender demasiado de la salida de la consola ..

¿Fue útil?

Solución

Se bloqueando probablemente en la llamada para conectar, después de que el printf.

stdoutes búfer de línea por defecto, y ya que no tiene un \ n al final de la cadena de printf, no verá su salida. Cuando se mata el programa, se tiró de la memoria intermedia, por lo que ve el mensaje a continuación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top