c++ - boost::asio::ssl::stream<tcp::socket> is closed before read -


i'm trying write synchronous ssl client. here code:

class chttpssession { public:     chttpssession(io_service& io_service, ssl::context &context, tcp::resolver::iterator endpoint_iterator) :         m_socket(io_service, context)     {         error_code error = error::host_not_found;         tcp::resolver::iterator end;         while (error && endpoint_iterator != end)         {             m_socket.lowest_layer().close();             m_socket.lowest_layer().connect(*endpoint_iterator++, error);         }          if (error)         {             throw system_error(error);         }          m_socket.handshake(ssl::stream_base::client);     }      void sendrequest(chttprequest& request)     {         write(m_socket, request.getrequest());     }      void receiveresponse(chttpresponse& response)     {         streambuf reply;         error_code error;         read(m_socket, reply, transfer_all(), error); //here error received         if (error && error != error::eof)             throw system_error(error);         response.init(reply);     }  private:     ssl::stream<tcp::socket> m_socket; }  int main(int argc, char* argv[]) {     try     {         io_service io_service;         string server = "some server here";         string port = "some port here";         tcp::resolver resolver(io_service);         tcp::resolver::query query(std::string(server), std::to_string(port));         tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);         ssl::context ctx(io_service, ssl::context_base::sslv23_client);         ctx.use_certificate_chain_file("path certificate file");         ctx.set_verify_mode(ssl::context_base::verify_none);         auto session = new chttpssession(io_service, ctx, endpoint_iterator);          chttprequest request;         chttpresonse response;         //request initialization          session.sendrequest(request);         session.receiveresponse(response);     }             catch (boost::system::system_error& exc)     {         cout<< exc.what() << std::endl;     } } 

but trying read data socket following error: request send or receive data disallowed because socket had been shut down in direction previous shutdown call.

i use similar code non-ssl client , works.

am missing something?

update:

found ssl stream closed: underlying tcp socket still open, data available through it, since encrypted, can't use it.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -