Ich stehe vor dem folgenden Problem. Ich versuche, eine Drittanbieter-Bibliothek mit Boost Asio zu verwenden, und ich muss einige Socket-Deskriptoren injizieren, die von der Bibliothek in der io_service-Ereignisschleife verwendet werden.Asio-Socket zerstören, ohne nativen Handler zu schließen
Der Ansatz, den ich verwende, ist die Erstellung eines boost :: asio :: ip :: tcp :: socket, der den nativen Handler übergibt, den meine Bibliothek bereitstellt.
Problem ist, dass Bibliothek nur kommunizieren würde, ist es nicht in bestimmten Socket-Benachrichtigungen interessiert (was bedeutet, dass Bibliothek den Socket schließen oder zu einem späteren Zeitpunkt wiederverwenden kann). In jedem Fall möchte ich Boost-Sockets aufräumen und sie zerstören, aber ohne den nativen Handler (d. H. Datei-Deskriptor) zu schließen.
Kurz gesagt, gibt es eine Möglichkeit, einen boost :: asio :: ip :: tcp :: socket zu zerstören, ohne den zugrunde liegenden Handler zu schließen? Ich bin mir bewusst, stattdessen posix :: stream_descriptor zu verwenden, aber ich möchte, dass meine Lösung portabel ist.
Haben Sie versucht, einen dummen Socket zu [zuweisen] (http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/basic_stream_socket/assign.html), auch wenn es fehlschlägt kann vorher sein wird nicht mehr verfügbar sein ... –
@JeanDavy 'socket.assign (Protokoll, nativ)' hat eine Voraussetzung, dass 'socket' nicht geöffnet ist (siehe [SocketService] (http: //www.boost .org/doc/libs/1_61_0/doc/html/boost_asio/Referenz/SocketService.html)). Wenn diese Vorbedingung nicht erfüllt ist, bleibt der Zustand von "Socket" unverändert. –