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


Log in to reply