boost::asio async_read timeout
-
Hallo
Wie kann ich realisieren, dass die async_read Funktion nicht ewig auf daten wartet? Unter Windows XP kann ich ja nicht in dem Handler von einem deadline_timer socket::cancel() aufrufen. Gibt's da einen anderen Ansatz? Den io_service darf ich auch nicht stoppen, weil sonst bei den anderen Thrads die run() Funktion vorzeitig zurückehrt.
Danke...
-
shutdown auf dem socket aufrufen (für die empfangsseite).
-
theta schrieb:
shutdown auf dem socket aufrufen (für die empfangsseite).
Muss ich das vor dem nächsten Receive-Vorgang irgendwie rückgängig machen?
-
Ich denke ich habe dich falsch verstanden.
shutdown(..) sollst Du nur benutzen, wenn Du die Verbindung herunterfahren willst (=Socket schliessen).Warum möchtest Du nicht, dass async_read solange waretet bis eben Daten anliegen oder die Verbindung heruntergefahren wird?
Bräuchtest Du ein (blockierendes) read mit timeout?
-
theta schrieb:
Bräuchtest Du ein (blockierendes) read mit timeout?
Ja, genau. Read und write mit timeout, und keines soll das andere blockieren.
Ich möchte so ein Interface erreichen:// Versteckt struct ConnectionImpl { boost::asio::io_service io_service; boost::asio::ip::tcp::socket socket; // etc. }; // C Interface typedef void* Connection; int Open(Connection** con, const char* address, unsigned short port, int timeout_ms); int Close(Connection* con, int timeout_ms); // Read und Write können parallel in separaten Threads ablaufen int Write(Connection* con, const char* buf, size_t n, int timeout_ms); int Read(Connection* con, char* buf, size_t n, int timeout_ms);Eine Funktion soll entweder erfolgreich sein oden nach timeout_ms zurückkehren. Sollte ich vielleicht besser eine ander Lib benutzen?