Question

Je suis en train de créer quelque chose de similaire que ce code trouvé aux exemples de 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 ++ builds ce sans aucune erreur, mais le code fait jamais passé l'appel resolver.resolve ().
Je l'ai essayé à la fois « 127.0.0.1 » et « localhost » pour l'hôte et « 80 » pour le port. (Ne pense pas qu'il devrait la matière, mais apache2 est en cours d'exécution)

Quand je ctrl + c sur ma demande, il se termine évidemment, mais il ne la sortie « Connexion à chaîne » juste avant qu'il ne.

Je prévois construire l'exemple moi-même et voir si le même problème se produit, et va certainement afficher les résultats ici. Quelqu'un at-il rencontré ce problème ou sait ce qui pourrait provoquer ce problème?

edit:
L'exemple exécute très bien ... J'ai du débogage à faire, je suppose.

seconde édition:
Je ne comprends pas, la seule chose qui pourrait être différent est l'hôte / port.
Exemple utilise char * argv [] et j'utilise:

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

troisième édition:
il semble en effet être le blocage à la connexion, a oublié de fflush (stdout). alors il doit être un problème avec la prise. va faire un peu plus de tests.

quatrième édition:
moi stupide, il ne bloquait pas du tout! Je ne faisais que trop compter sur la sortie de la console ..

Était-ce utile?

La solution

Il bloque probablement sur l'appel à se connecter, après la printf.

stdout est un tampon de ligne par défaut, et puisque vous ne disposez pas d'un \ n à la fin de votre chaîne de printf, vous ne verrez pas sa sortie. Lorsque vous tuez le programme, le tampon est vidé, ce qui est la raison pour laquelle vous voyez le message alors.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top