c++ - Server with libpion crashing at request handling -


i use following versions of libraries: libpion-dev 5.0.6 libboost-all-dev 1.58.0 in internet found simple example of asynchronous http-server, falls in processing of requests handler described. in addition, non-existent resources correctly returns 404 response.

server code:i use following versions of libraries: libpion-dev 5.0.6 libboost-all-dev 1.58.0 in internet found simple example of asynchronous http-server, falls in processing of requests handler described. in addition, non-existent resources correctly returns 404 response.

server code:

#include <boost/bind/arg.hpp> #include <boost/bind/bind.hpp> #include <boost/bind/placeholders.hpp> #include <boost/smart_ptr/shared_ptr.hpp> #include <pion/http/parser.hpp> #include <pion/http/request.hpp> #include <pion/http/response_writer.hpp> #include <pion/http/server.hpp> #include <pion/tcp/connection.hpp> #include <unistd.h>  struct fake_server {     void start() {         m_server = pion::http::server_ptr(new pion::http::server(8080));         m_server->add_resource("/test", boost::bind(&fake_server::handle_request, this, _1, _2));         m_server->start();     }      void handle_request(pion::http::request_ptr& _httprequest, pion::tcp::connection_ptr& _tcpconn) {          pion::http::response_writer_ptr writer(                 pion::http::response_writer::create(                 _tcpconn,                 *_httprequest,                 boost::bind(&pion::tcp::connection::finish, _tcpconn)));         pion::http::response& r = writer->get_response();         writer->write("hello world");         writer->send();     }      pion::http::server_ptr m_server; };  int main() {      fake_server svr;     svr.start();      for(;;) sleep(86400); } 

stack of threas, crashed:

thread #9 [test_pion] 16903 [core: 0] (suspended : signal : sigsegv:segmentation fault)      boost::asio::detail::reactive_socket_service_base::start_op() @ reactive_socket_service_base.ipp:219 0x412918       boost::asio::detail::reactive_socket_service_base::async_send<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> > >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::asio::detail::transfer_all_t, boost::function2<void, boost::system::error_code const&, unsigned long> > >() @ reactive_socket_service_base.hpp:216 0x41a79e       boost::asio::stream_socket_service<boost::asio::ip::tcp>::async_send<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> > >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::asio::detail::transfer_all_t, boost::function2<void, boost::system::error_code const&, unsigned long> > >() @ stream_socket_service.hpp:330 0x41a79e       boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::async_write_some<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> > >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::asio::detail::transfer_all_t, boost::function2<void, boost::system::error_code const&, unsigned long> > >() @ basic_stream_socket.hpp:732 0x41a79e      boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::asio::detail::transfer_all_t, boost::function2<void, boost::system::error_code const&, unsigned long> >::operator() @ write.hpp:181 0x41a79e        boost::asio::async_write<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::function2<void, boost::system::error_code const&, unsigned long>&>() @ write.hpp:621 0x41acc6        pion::tcp::connection::async_write<std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >, boost::function2<void, boost::system::error_code const&, unsigned long> >() @ connection.hpp:567 0x41ca4c        pion::http::writer::send_more_data<boost::function2<void, boost::system::error_code const&, unsigned long> >() @ writer.hpp:277 0x41ca4c        pion::http::writer::send() @ writer.hpp:167 0x41cf8f        fake_server::handle_request() @ test_pion.cpp:28 0x41cf8f       boost::function2<void, boost::shared_ptr<pion::http::request>&, boost::shared_ptr<pion::tcp::connection>&>::operator()(boost::shared_ptr<pion::http::request>&, boost::shared_ptr<pion::tcp::connection>&) const @ 0x7ffff6e8a5c9       pion::http::server::handle_request() @ 0x7ffff6e8516b       boost::function3<void, boost::shared_ptr<pion::http::request>, boost::shared_ptr<pion::tcp::connection>, boost::system::error_code const&>::operator()(boost::shared_ptr<pion::http::request>, boost::shared_ptr<pion::tcp::connection>, boost::system::error_code const&) const @ 0x7ffff6e8a25c       pion::http::request_reader::finished_reading() @ 0x7ffff6e8a3bb         pion::http::reader::consume_bytes() @ 0x7ffff6e830ec        pion::http::reader::consume_bytes() @ 0x7ffff6e8374d        boost::asio::detail::reactive_socket_recv_op<boost::asio::mutable_buffers_1, boost::_bi::bind_t<void, boost::_mfi::mf2<void, pion::http::reader, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<boost::shared_ptr<pion::http::request_reader> >, boost::arg<1> (*)(), boost::arg<2> (*)()> > >::do_complete @ 0x7ffff6e8810b         boost::asio::detail::epoll_reactor::descriptor_state::do_complete() @ 0x7ffff6e55a84        pion::scheduler::process_service_work() @ 0x7ffff6e41de1        0x7ffff7bc3bc5       start_thread() @ pthread_create.c:333 0x7ffff5d446aa        clone() @ clone.s:109 0x7ffff6269e9d    

in example, request http://127.0.0.1:8080/none returns 404 without crash, , http://127.0.0.1:8080/test make crash. can not understand, reason , how right. library haven't documentation, maybe not taken account. please help.

i'm not expert in pion library. however, reason why request /none returns 404 without crashing because it's being handled pion library not handle_request function.

there example of using pion library here. may discover what's going wrong in handle_request function.


Comments

Popular posts from this blog

java - Static nested class instance -

c# - Bluetooth LE CanUpdate Characteristic property -

JavaScript - Replace variable from string in all occurrences -