Frage

Ich versuche, etwas ähnliches wie dieser Code an den Boost.Asio Beispiele gefunden.

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 ++ baut dies ohne Fehler, aber der Code nie macht es vorbei an der resolver.resolve () -Aufruf.
Ich habe versucht, beide „127.0.0.1“ und „localhost“ für Host und „80“ für den Port. (Glaube nicht, dass es eine Rolle, aber apache2 ist und läuft)

Wenn ich Strg + C aus meiner Anwendung, es endet offensichtlich, aber es tut Ausgabe der „String anschließen“, kurz bevor es der Fall ist.

Ich plane, die beispiels mich auf den Aufbau und sehen, ob das gleiche Problem auftritt, und wird auf jeden Fall die Ergebnisse hier posten. Hat jemand dieses Problem gestoßen oder weiß, was möglicherweise dieses Verhalten verursachen könnte?

edit:
Das Beispiel läuft ganz gut ... Ich habe einige Debug Ich nehme zu tun.

zweite edit:
Ich verstehe es nicht, das einzige, was anders sein könnte, ist Host / Port.
Beispiel verwendet char * argv [] und ich bin mit:

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

dritte edit:
es scheint in der Tat auf eine Verbindung zu blockieren, vergessen zu fflush (stdout). dann hat es ein Problem mit der Steckdose sein. gehen einige Tests zu tun.

vierte edit:
dumm ich, es war überhaupt nicht blockiert! Ich war einfach zu viel Vertrauen auf die Konsolenausgabe ..

War es hilfreich?

Lösung

Es ist wahrscheinlich auf die Anrufblockierung zu verbinden, nach dem printf.

ist stdout Linie standardmäßig gepuffert, und da Sie am Ende Ihres printf Zeichenfolge keine \ n haben, werden Sie nicht seine Ausgabe sehen. Wenn Sie das Programm töten, wird der Puffer gespült wird, weshalb die Meldung dann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top