Using SSL sockets and non-SSL sockets simultaneously in Boost.Asio?

前端 未结 4 1712
盖世英雄少女心
盖世英雄少女心 2020-12-24 06:58

I\'m in the process of converting a library to Boost.Asio (which has worked very well so far), but I\'ve hit something of a stumbling block with regards to a design decision

4条回答
  •  执笔经年
    2020-12-24 07:41

    There's a couple of ways you can do this. In the past, I've done something like

    if ( sslEnabled )
        boost::asio::async_write( secureSocket_ );
    } else {
        boost::asio::async_write( secureSocket_.lowest_layer() );
    }
    

    Which can get messy pretty quickly with a lot of if/else statements. You could also create an abstract class (pseudo code - oversimplified)

    class Socket
    {
        public:
           virtual void connect( ... );
           virtual void accept( ... );
           virtual void async_write( ... );
           virtual void async_read( ... );
        private:
            boost::asio::ip::tcp::socket socket_;
    };
    

    Then create a derived class SecureSocket to operate on a secureSocket_ instead of socket_. I don't think it would be duplicating a lot of code, and it's probably cleaner than if/else whenever you need to async_read or async_write.

提交回复
热议问题