Hallo,
noch eine kleine Frage zu Boost Asio, mir ist aufgefallen, dass sobald
im Server ein Acceptor-Objekt angelegt wird sofort alle Clients sich
connecten können und auch Daten schicken können selbst wenn im Server
noch kein accept aufgerufen wurde.
// im Server:
1 | tcp::acceptor acceptor{ioservice, tcp_endpoint};
|
2 | //acceptor.accept(socket); // testweise wegkommentiert
|
3 | //read(...)
|
// im Client:
1 | boost::asio::connect(socket, resolver.resolve(q));
|
2 | write(socket,buffer);
|
Was mich wundert ist:
Wenn man im Server "acceptor.accept(socket);" testweise NICHT aufruft
(nach dem Anlegen des acceptor-Objektes), dann connected der Client und
kann erfolgreich die Funktion write(socket,buffer) ausführen obwohl im
Server acceptor.accept(socket) noch nicht aufgerufen wurde (und kein
read()).
Der Client tut also so, als wäre alles Verbunden und Daten werden
vermeindlich erfolgreich gesendet (ich dachte bei write() wird dies
validiert). Wieso ist das möglich?
Ich möchte eigentlich das der Client eine Exception bekommen solange im
Server acceptor.accept(socket) noch nicht aufgerufen wurde oder eben
irgendeine andere Kontrolle.
Grüße