Über boost::asio-sockets und blockieren

So versuchte ich, aus boost::asio und getestet, die Sperrung echo-Beispiele. Sie scheinen nicht vollständig zu blockieren scheint. Zumindest nicht in der Weise, die ich erwartet hatte.

Ist es möglich, um loszuwerden, jede Art von Pufferung oder was ist die kleinste Puffergröße, die Sie haben können? Es sieht aus wie 10000 bytes ist zu klein.

Den folgenden code läuft durch 2 schreibt, bevor es blockiert. Wenn ich boost::asio::transfer_exactly(10000) übergeben, um das schreiben, es ist immer noch 2. boost::asio::transfer_exactly(5000) bekommt von mir 5 schreibt.

Also, wie funktioniert diese Vernetzung/io/asio-Zeug funktioniert? Wie, wenn ich wollte senden Sie einfach ein einzelnes byte und warten, bis es an das andere Ende, ohne jede weitere Kommunikation.

Server:

boost::asio::io_service io_service;

tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), 12346));
tcp::socket sock(io_service);

a.accept(sock);
sock.non_blocking(false);
boost::asio::socket_base::send_buffer_size option(10000);
sock.set_option(option);

while(true) {
    char data[10000];

    boost::asio::socket_base::bytes_readable bytes_readable_cmd(true);
    sock.io_control(bytes_readable_cmd);
    std::size_t bytes_readable = bytes_readable_cmd.get();
    if(bytes_readable) {
        /**/
    }

    boost::asio::write(sock, boost::asio::buffer(data, 10000));
    printf("#\n");Sleep(10);
}

Client:

boost::asio::io_service io_service;

tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), "localhost", "12346");
tcp::resolver::iterator iterator = resolver.resolve(query);

tcp::socket sock(io_service);
boost::asio::connect(sock, iterator);
sock.non_blocking(false);
  • Warum willst du Daten senden und warten, bis er empfangen wird, auf der anderen Seite?
  • Lassen Sie uns sagen, dass ich egal, wenn die receiver-Programm tatsächlich bekam die Daten und behandelt. Ich will nur das, was TCP-Protokoll bietet mir. Also habe ich erwartet, dass die asio 's ' senden'/'schreiben' blockiert, bis Empfänger genannt 'recv'. Das ist ok, wenn asio-Griffe, die anders hinter der Szene. Ich bin einfach nur neugierig.
InformationsquelleAutor Ivarpoiss | 2012-05-11
Schreibe einen Kommentar