Hi

I'm trying to hack cpp-netlib to implement a https server. I have used the ssl server example from boost 1.46.1 which is working okay, but when I (think) I do the same thing in cpp-net lib I got this segmentation fault:

#0  0x00007ffff7bbda57 in SSL_accept () from /usr/lib64/libssl.so.1.0.0
#1  0x00000000004c1702 in boost::network::http::sync_connection<boost::network::http::tags::http_server, handler>::socket (this=0x4d58ca)
    at /home/awn/git/buildroot5/git/gmbinit/test/cpp-netlib-0.9.2/boost/network/protocol/http/server/sync_connection.hpp:50
#2  0x00000000004d4e67 in boost::detail::function::function_invoker1<int (*)(SSL*), int, SSL*>::invoke (function_ptr=..., a0=0x731820) at /usr/include/boost-1_46/boost/function/function_template.hpp:95
#3  0x00000000004d0fd6 in boost::function1<int, SSL*>::operator() (this=0x73b490, a0=0x731820) at /usr/include/boost-1_46/boost/function/function_template.hpp:1013
#4  0x00000000004cde2f in boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >::start (this=0x73b490)
    at /usr/include/boost-1_46/boost/asio/ssl/detail/openssl_operation.hpp:149
#5  0x00000000004df1b3 in boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >::operator() (
    this=0x7fffffffc500, p=0x73b490) at /usr/include/boost-1_46/boost/bind/mem_fn_template.hpp:49
#6  0x00000000004dd693 in boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> >::operator()<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list0> (this=0x7fffffffc510, f=...,
    a=...) at /usr/include/boost-1_46/boost/bind/bind.hpp:243
#7  0x00000000004db687 in boost::_bi::bind_t<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> > >::operator() (this=0x7fffffffc500)
    at /usr/include/boost-1_46/boost/bind/bind_template.hpp:20
#8  0x00000000004d980e in boost::asio::asio_handler_invoke<boost::_bi::bind_t<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> > > > (
    function=...) at /usr/include/boost-1_46/boost/asio/handler_invoke_hook.hpp:64
#9  0x00000000004d7b22 in boost_asio_handler_invoke_helpers::invoke<boost::_bi::bind_t<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> > >, boost::_bi::bind_t<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> > > > (function=..., context=...)
    at /usr/include/boost-1_46/boost/asio/detail/handler_invoke_helpers.hpp:39
#10 0x00000000004d5990 in boost::asio::detail::completion_handler<boost::_bi::bind_t<int, boost::_mfi::mf0<int, boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::list1<boost::_bi::value<boost::asio::ssl::detail::openssl_operation<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >*> > > >::do_complete (owner=0x734c60, base=0x72fb80) at /usr/include/boost-1_46/boost/asio/detail/completion_handler.hpp:63
#11 0x00000000004ae40b in boost::asio::detail::task_io_service_operation::complete (this=0x72fb80, owner=...) at /usr/include/boost-1_46/boost/asio/detail/task_io_service_operation.hpp:35
#12 0x00000000004b3fb2 in boost::asio::detail::strand_service::do_complete (owner=0x734c60, base=0x7308e0) at /usr/include/boost-1_46/boost/asio/detail/impl/strand_service.ipp:98
#13 0x00000000004ae40b in boost::asio::detail::task_io_service_operation::complete (this=0x7308e0, owner=...) at /usr/include/boost-1_46/boost/asio/detail/task_io_service_operation.hpp:35
#14 0x00000000004b0449 in boost::asio::detail::task_io_service::do_one (this=0x734c60, lock=..., this_idle_thread=0x7fffffffc790) at /usr/include/boost-1_46/boost/asio/detail/impl/task_io_service.ipp:278
#15 0x00000000004aff97 in boost::asio::detail::task_io_service::run (this=0x734c60, ec=...) at /usr/include/boost-1_46/boost/asio/detail/impl/task_io_service.ipp:130
#16 0x00000000004b0841 in boost::asio::io_service::run (this=0x7fffffffc980) at /usr/include/boost-1_46/boost/asio/impl/io_service.ipp:57
#17 0x00000000004ac04b in main (arg=1, argv=0x7fffffffcb18) at /home/awn/git/buildroot5/git/gmbinit/test/serverTest.cxx:51


As the problem is in SSL_accept ()  i expect there is something wrong with my SSL context which I create like this:

    boost::asio::ssl::context context_(io_service, boost::asio::ssl::context::sslv23);
    context_.set_verify_mode(boost::asio::ssl::context::verify_none);
    context_.use_certificate_chain_file("/etc/ssl/gamblify/gamblify.cert");
    context_.use_private_key_file("/etc/ssl/gamblify/gamblify.pem", boost::asio::ssl::context::pem);

The context is created in my main function, and then passed around  as a reference.

The type of my socket is:
     boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket_;

I create it like this:
     socket_(service_, context)

Accept is using the lowest layer which I return like this
        boost::asio::ssl::stream<boost::asio::ip::tcp::socket>::lowest_layer_type& socket()
        {
            return socket_.lowest_layer();
        }

I call async_accept like this:

            new_connection.reset(new sync_connection<Tag,Handler>(service_, handler_, context_));
            acceptor_.async_accept(new_connection->socket(),
                boost::bind(&sync_server_base<Tag,Handler>::handle_accept,
                            this, boost::asio::placeholders::error));

The handler looks like this:
        void handle_accept(boost::system::error_code const & ec) {
            if (!ec) {
                new_connection->start();
                new_connection.reset(new sync_connection<Tag,Handler>(service_, handler_, context_));
                acceptor_.async_accept(new_connection->socket(),
                    boost::bind(&sync_server_base<Tag,Handler>::handle_accept,
                                this, boost::asio::placeholders::error));
            }
        }

Eventually the accept handler and it is running start which looks like this:
        void start()
        {
            std::cerr << "Running start" << std::endl;
            socket_.async_handshake(boost::asio::ssl::stream_base::server,
                                    boost::bind(&sync_connection<Tag,Handler>::handle_handshake, this,
                                                boost::asio::placeholders::error));
        }

Then at some point before I reach the handle_handshake I get an segmentation fault...

Can any body see any problems with this, or just give some hints on how to debug this kind of bugs...

--
Allan W. Nielsen