Move boost SSL socket
-
Hallo,
und zwar bin ich seit einer Weile dran rauszufinden, ob es irgendwie möglich ist, einen SSL socket (boost::asio) per std::move einem Constructor zu übergeben.
Habe hier ein kleines Beispiel zusammengefasst.Ist es möglich diesen socket/streamtcp::socket mit std::move zu verschieben ? Der "normale" tcp::socket kann verschoben werden, aber der SSL ?
#define BOOST_ASIO_HAS_MOVE //Macro redefinition #pragma warning(disable:4005) #include <boost\asio.hpp> #pragma warning(default:4005) #define USING_OPENSSL_SOCKET #ifdef USING_OPENSSL_SOCKET #include <boost\asio\ssl.hpp> #endif using boost::asio::ip::tcp; typedef boost::asio::ssl::stream<tcp::socket> SocketType; class BoostSocket { public: BoostSocket(SocketType &&s) : _socket(std::move(s)) { } BoostSocket(boost::asio::io_service &ioService, boost::asio::ssl::context &ctx) : _socket(ioService, ctx) { } //... private: SocketType _socket; }; int main(void) { boost::asio::io_service ioservice; boost::asio::ssl::context ctx(ioservice, boost::asio::ssl::context::sslv23); //Socket wird erstellt... SocketType sock(ioservice, ctx); BoostSocket bs(std::move(sock)); return 0; }
-
Nein, das scheint nicht vorgesehen zu sein: noncopyable und keine Move-Methoden vorhanden
-
Danke... hatte ich wohl übersehen.
Habe mich nochmals weiter im Code umgesehen, ob eine Implementation von der move-Funktionalität möglich wäre... das würde allerdings das ändern einiger bestehender Klassen bedeuten**[1],** daher wäre wohl ein Pointer noch eine Möglichkeit... auch wenn bei viel existierendem Code das nicht so schnell geändert ist.[1]
Implement* move:
(...)\boost\asio\ssl\stream.hpp
(...)\boost\asio\ssl\detail\stream_core.hpp
(...)\boost\asio\ssl\detail\engine.hpp
(...)\boost\asio\basic_deadline_timer.hpp*Möglicherweise mehr, das sind die Ergebnisse einer kurzen Suche