Meine C++ library
macht TCP-Verbindung mit einer Liste der Verwendung von boost :: asio_connector_async Das Problem ist, dass, wenn einer der Streams aus irgendeinem Grund geschlossen ist, keine Informationen von Boost zu meiner Bibliothek in Bezug auf die gleiche gesendet wird. Daher kann meine Bibliothek nie erkennen, welche Streams geschlossen und welche noch offen sind. Meine Bibliothek enthält ein Objekt der Klasse boost :: asio_connector_async (mit Namen Stecker) und stellt eine Verbindung zum Host-Port auf diese Weise:Wie erkenne ich, ob ein bestimmter TCP-Stream, der über boost :: asio_stream_async verbunden ist, geschlossen ist?
connector.async_connect(hostname.c_str(), qport.c_str(), boost::bind(bc::asio_bind_sock_chan<pubsub_channel,pubsub_channel::text_marshaler_registry>(),boost::ref(chan), boost::ref(mar_reg), hostname, qport, channel_logger, _1, _2, _3));
Wenn ein bestimmte <host,port>
Strom geschlossen ist, wird die Funktion boost::asio_connector_async::on_stream_closed
aufgerufen intern aus der Datei asio_stream_async.hpp
void on_stream_closed(void * sp, const std::string & host, const std::string port) {
boost::channel::logger_stream(logger_) << "boost::channel::asio_connector_async::on_stream_closed - " << host << ":" << port << ": stream 0x" << sp << " closed";
}
ich meine Bibliothek boost::asio_connector_async::on_stream_closed
so anhängen möchten, dass, wenn diese spezielle Funktion aufgerufen wird, wird eine Funktion in meiner Bibliothek auch so aufgerufen, dass meine Bibliothek bewusst ist, welche bestimmte Strom ist geschlossen ed und dann sollte versuchen, wieder mit diesem Stream Bitte schlagen Sie vor, wie kann ich das gleiche erreichen? Ich kann mir sowieso nicht vorstellen, dies zu erreichen, ohne die Boost-Bibliothek zu ändern (was ich nicht tun soll) Wenn es eine andere Möglichkeit gibt, geschlossene Verbindungen zu erkennen, bitte schlage mir auch diese vor.
Ich bin neu in dieser Art von Netzwerk-Programmierung, benötigen daher Hilfe mit dem gleichen. Vielen Dank im Voraus
Ich glaube nicht, Boost/channel/streams/asio_connector_async.hpp :: async_conect nimmt ein "Fehler" -Argument. Leere async_connect (std :: string Host, std :: string-Port, sock_conn_handler HNDL) Mein Code direkt async_connect ruft ein Objekt von asio_connector_sync –
Mein Grundanliegen besteht darin, die Trennung Informationen an die Client-Bibliothek zu senden. Boost-Bibliothek erkennt die Trennung, wenn der Socket geschlossen ist, aber diese Information wird nicht mit der Client-Bibliothek kommuniziert. –
@ShubhiAgarwal Es ist Ihr Handler, der 'asio :: error' nehmen sollte, nicht async_connect. In deinem Fall 'sock_conn_handler'. Kannst du mir die Signatur der Funktion 'sock_conn_handler' nennen? – Arunmu