C++ websocket client/server library

Overview

WebSocket++ (0.8.2)

WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol. It allows integrating WebSocket client and server functionality into C++ programs. It uses interchangeable network transport modules including one based on raw char buffers, one based on C++ iostreams, and one based on Asio (either via Boost or standalone). End users can write additional transport policies to support other networking or event libraries as needed.

Major Features

  • Full support for RFC6455
  • Partial support for Hixie 76 / Hybi 00, 07-17 draft specs (server only)
  • Message/event based interface
  • Supports secure WebSockets (TLS), IPv6, and explicit proxies.
  • Flexible dependency management (C++11 Standard Library or Boost)
  • Interchangeable network transport modules (raw, iostream, Asio, or custom)
  • Portable/cross platform (Posix/Windows, 32/64bit, Intel/ARM/PPC)
  • Thread-safe

Get Involved

Build Status

Project Website http://www.zaphoyd.com/websocketpp/

User Manual http://docs.websocketpp.org/

GitHub Repository https://github.com/zaphoyd/websocketpp/

GitHub pull requests should be submitted to the develop branch.

Announcements Mailing List http://groups.google.com/group/websocketpp-announcements/

IRC Channel #websocketpp (freenode)

Discussion / Development / Support Mailing List / Forum http://groups.google.com/group/websocketpp/

Author

Peter Thorson - [email protected]

Issues
  • Threaded websocket server

    Threaded websocket server

    Hello,

    Is it possible to use the websocketpp in threaded non-blocking server ? For example - each connection (and/or on_message event inside the connection event) process with new thread, so the stall/processing of the connections/events can't influence on others. As I understand - for now the default processing model is single threaded - the next connection or event inside connection will not be handled until the previous exits. This is very confusing for many applications.

    Thanks

    opened by Sfinx 33
  • Proxy support?

    Proxy support?

    Hi,

    Thanks for the library...it looks super useful.

    That said, one of the reasons I'm interested in WebSockets as a transport mechanism is the possibility of using it over an http proxy. I've tested this in-browser and it works via the proxy in question, but I can't figure out how I'd do it with websocketpp. I've looked around at boost::asio documentation and don't really see anything in there, either, except for one person that did it with a lot of very specific manual code, which I'm not sure it'd be easy to shoehorn into websocketpp (http://lists.boost.org/boost-users/2008/05/36356.php).

    Any advice?

    Thanks, Jeff

    0.3.x Needs Testing Needs Documentation 
    opened by jefferai 28
  • websocket++ Client/Server on the Windows XP

    websocket++ Client/Server on the Windows XP

    I use the examples named "echo_client" and "echo_server".The Server and Client can run normally on the Win7 and win8.It prompts "invalid state" when the programs run on the winXP.The Client can't connect with the Server.

    Support Request 
    opened by dearbub 19
  • Cannot connect to websocketpp server when ufw firewall is installed

    Cannot connect to websocketpp server when ufw firewall is installed

    And no, I have not blocked the port :) Even if I disable the firewall I cannot connect until I reboot the computer. Restarting the app does not help. Although other apps using boost asio directly or zmq works just fine.

    I made a post on stack overflow but since I believe the issue must be related to websocketpp and boost asio somehow I post here too

    I am using the echo server in the example directory for my tests.

    Check that my app is listen on port 9002:

    sudo netstat -lnp | grep 900
    tcp6       0      0 :::9002                 :::*                    LISTEN      12695/./bin/echo_se 
    

    Output from the echo server with debug

    [2017-03-09 11:38:06] [devel] endpoint constructor
    [2017-03-09 11:38:06] [devel] server constructor
    [2017-03-09 11:38:06] [devel] asio::init_asio
    [2017-03-09 11:38:06] [devel] set_message_handler
    [2017-03-09 11:38:06] [devel] asio::listen
    [2017-03-09 11:38:06] [devel] create_connection
    [2017-03-09 11:38:06] [devel] asio con transport constructor
    [2017-03-09 11:38:06] [devel] connection constructor
    [2017-03-09 11:38:06] [devel] transport::asio::init
    [2017-03-09 11:38:06] [devel] asio::async_accept
    

    Output from telnet (since I only care about the tcp handshake at this point

    telnet localhost 9002
    Trying ::1...
    (eventually timeout)
    

    And If I close the echo server so no app is listening any more. Then I get (as expected)

    telnet localhost 9002
    Trying ::1...
    Connection failed: Connection refused
    Trying 127.0.0.1...
    telnet: Unable to connect to remote host: Connection refused
    

    So, now the OS notice that no one is listening and sends connection refused. I mean. This tells me that the traffic is not blocked and that the application has successfully made bind and listen. So why doesn't it work?

    For completeness. After disabling ufw and rebooting the echo server prints this

    2017-03-09 11:49:17] [devel] endpoint constructor
    [2017-03-09 11:49:17] [devel] server constructor
    [2017-03-09 11:49:17] [devel] asio::init_asio
    [2017-03-09 11:49:17] [devel] set_message_handler
    [2017-03-09 11:49:17] [devel] asio::listen
    [2017-03-09 11:49:17] [devel] create_connection
    [2017-03-09 11:49:17] [devel] asio con transport constructor
    [2017-03-09 11:49:17] [devel] connection constructor
    [2017-03-09 11:49:17] [devel] transport::asio::init
    [2017-03-09 11:49:17] [devel] asio::async_accept
    [2017-03-09 11:49:23] [devel] asio::handle_accept
    [2017-03-09 11:49:23] [devel] connection start
    [2017-03-09 11:49:23] [devel] asio connection init
    [2017-03-09 11:49:23] [devel] asio connection handle pre_init
    [2017-03-09 11:49:23] [devel] asio connection post_init
    [2017-03-09 11:49:23] [devel] asio connection handle_post_init
    [2017-03-09 11:49:23] [devel] connection handle_transport_init
    [2017-03-09 11:49:23] [devel] connection read_handshake
    [2017-03-09 11:49:23] [devel] asio async_read_at_least: 1
    [2017-03-09 11:49:23] [devel] create_connection
    [2017-03-09 11:49:23] [devel] asio con transport constructor
    [2017-03-09 11:49:23] [devel] connection constructor
    [2017-03-09 11:49:23] [devel] transport::asio::init
    [2017-03-09 11:49:23] [devel] asio::async_accept
    [2017-03-09 11:49:23] [devel] asio post init timer cancelled
    

    and telnet this:

    telnet localhost 9002
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    Connection closed by foreign host.
    

    So then everything works perfekt!

    And "after sudo ufw enable && sudo ufw disable" it does not work any more...

    Also see: http://stackoverflow.com/questions/42693473/issue-with-accepting-connection-using-websocketpp-with-firewall-enabled

    I also tried to compile the lib with standalone ASIO but it is the same...

    Any help appreciated. Is it a way to make websocketpp sever even more minimal to try and find something that works?

    Support Request 
    opened by tkarls 18
  • Possible SYN flooding

    Possible SYN flooding

    Hi, I had an websocketpp server running for about a year now (only occasionally on a local linux machine for integration test of another system, so only one concurrent connection), but suddenly it stopped working: Clients cannot connect anymore (they timeout).

    in dmesg i get the following error: request_sock_TCP: Possible SYN flooding on port 9002. Dropping request. Check SNMP counters. But there's only one connection, so it definetely cannot be "real" SYN flooding.

    I tried it also with the echo_server and echo_client example => same problem.

    I tried fiddling around with the "syn" options in /etc/sysctl.conf (enabling, disabling, changing memory), => no effect.

    I also used debug_asio_no_tls => does not give any output on connection attempts.

    However, it can't be my system all alone, when trying to set up a node js based websocket server, it works flawlessly.

    Any ideas what might be the problem (as it is not a productive environment, workarounds are also highly appreciated)?

    Asio Transport 
    opened by derwassi 15
  • request_server.listen(m_port, m_poolThreads);

    request_server.listen(m_port, m_poolThreads);

    Hello,

    just have a problem, i'm trying your websocketpp implementation. If i will create a "websocketpp::server request_server" and want to start listening by calling "request_server.listen(...)", there's a exception thrown from "server::start_listen" -> "m_acceptor.open(e.protocol()". The exception said that the handle is not valid! What can it be?

    Thanks in Advance, Christian

    Support Request 
    opened by joestrummer 14
  • Deadlock

    Deadlock

    Hello,

    I just started using websocketpp about 2 months ago and now that's it's been integrated into my code for a while now, I'm now experiencing an occasional deadlock between two threads. I don't really understand what's causing it, but it looks like it's deadlocked in the bowels of websocketpp and boost. Does anyone have advice? The callstacks for the 2 threads are below. The line numbers may not be 100% accurate.

    Thanks for your time and attention.

    ~Dan

    Thread 1 - Sending a message from the server

    boost::detail::basic_timed_mutex::lock() Line 80 boost::lock_guardboost::mutex::lock_guardboost::mutex(boost::mutex & m_={...}) Line 258 websocketpp::message::poolwebsocketpp::message::data::recycle(boost::intrusive_ptrwebsocketpp::message::data * p=0x00000000001aee68) Line 117 + 0x16 bytes websocketpp::message::intrusive_ptr_release(const websocketpp::message::data * s=0x000000000f016e20) Line 228 + 0x46 bytes boost::intrusive_ptrwebsocketpp::message::data::~intrusive_ptrwebsocketpp::message::data() Line 97 boost::intrusive_ptrwebsocketpp::message::data::`scalar deleting destructor'() + 0x17 bytes std::_Destroyboost::intrusive_ptr<websocketpp::message::data >(boost::intrusive_ptrwebsocketpp::message::data * _Ptr=0x000000000f9f3728) Line 60 std::allocatorboost::intrusive_ptr<websocketpp::message::data >::destroy(boost::intrusive_ptrwebsocketpp::message::data * _Ptr=0x000000000f9f3728) Line 161 std::_Destroy_rangestd::allocator<boost::intrusive_ptr<websocketpp::message::data > >(boost::intrusive_ptrwebsocketpp::message::data * _First=0x000000000f9f3728, boost::intrusive_ptrwebsocketpp::message::data * _Last=0x000000000f9f3ad8, std::allocatorboost::intrusive_ptr<websocketpp::message::data > & _Al={...}, std::_Nonscalar_ptr_iterator_tag __formal={...}) Line 234 + 0xf bytes std::_Destroy_rangestd::allocator<boost::intrusive_ptr<websocketpp::message::data > >(boost::intrusive_ptrwebsocketpp::message::data * _First=0x000000000f9f3670, boost::intrusive_ptrwebsocketpp::message::data * _Last=0x000000000f9f3ad8, std::allocatorboost::intrusive_ptr<websocketpp::message::data > & _Al={...}) Line 226 std::vectorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > >::_Destroy(boost::intrusive_ptrwebsocketpp::message::data * _First=0x000000000f9f3670, boost::intrusive_ptrwebsocketpp::message::data * _Last=0x000000000f9f3ad8) Line 1120 std::vectorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > >::_Insert_n(std::_Vector_const_iteratorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > > _Where={px=??? }, unsigned __int64 _Count=142, const boost::intrusive_ptrwebsocketpp::message::data & _Val={...}) Line 1198 std::vectorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > >::insert(std::_Vector_const_iteratorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > > _Where={px=0x000000000f9c88a0 }, const boost::intrusive_ptrwebsocketpp::message::data & _Val={...}) Line 878 std::vectorboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > >::push_back(const boost::intrusive_ptrwebsocketpp::message::data & _Val={...}) Line 824 websocketpp::message::poolwebsocketpp::message::data::get() Line 113 websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger::get_control_message() Line 479 + 0x1e bytes websocketpp::connectionwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>::get_control_message2() Line 588 + 0x16 bytes websocketpp::connectionwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>::send(const std::basic_string<char,std::char_traits,std::allocator > & payload="", websocketpp::frame::opcode::value op=BINARY) Line 1554 + 0x12 bytes CRVWebSocketServer::SendRawMessageToClient(const int connectionID=0, unsigned int messageSize=66, unsigned char * pMessage=0x000000000f9cfac0) Line 27 CMyModuleManager::CallbackFromConnectWnd(__int64 lparam=142891632) Line 312 CConnectWnd::OnUserDoCallback(unsigned __int64 __formal=1325, __int64 lParam=142891632) Line 34

    Thread 2 - Listening for new incoming connections

    boost::detail::basic_timed_mutex::lock() Line 80 boost::lock_guardboost::mutex::lock_guardboost::mutex(boost::mutex & m_={...}) Line 258 websocketpp::message::poolwebsocketpp::message::data::recycle(boost::intrusive_ptrwebsocketpp::message::data * p=0x000000000799e3d8) Line 117 + 0x16 bytes websocketpp::message::intrusive_ptr_release(const websocketpp::message::data * s=0x000000000eecf580) Line 228 + 0x46 bytes boost::intrusive_ptrwebsocketpp::message::data::~intrusive_ptrwebsocketpp::message::data() Line 97 boost::intrusive_ptrwebsocketpp::message::data::`scalar deleting destructor'() + 0x17 bytes std::_Destroyboost::intrusive_ptr<websocketpp::message::data >(boost::intrusive_ptrwebsocketpp::message::data * _Ptr=0x0000000010845a78) Line 60 std::allocatorboost::intrusive_ptr<websocketpp::message::data >::destroy(boost::intrusive_ptrwebsocketpp::message::data * _Ptr=0x0000000010845a78) Line 161 std::dequeboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > >::pop_front() Line 835 std::queueboost::intrusive_ptr<websocketpp::message::data,std::dequeboost::intrusive_ptr<websocketpp::message::data,std::allocatorboost::intrusive_ptr<websocketpp::message::data > > >::pop() Line 77 websocketpp::connectionwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>::handle_write(const boost::system::error_code & error={...}) Line 1272 boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>::callboost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> >,boost::system::error_code const >(boost::shared_ptrwebsocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > & u={...}, const void * __formal=0x0000000000000000, const boost::system::error_code & b1={...}) Line 157 boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>::operator()boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >(boost::shared_ptrwebsocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > & u={...}, const boost::system::error_code & a1={...}) Line 172 boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> >::operator()boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list1<boost::system::error_code const & __ptr64> >(boost::_bi::type __formal={...}, boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &> & f={...}, boost::_bi::list1<boost::system::error_code const &> & a={...}, boost::_bi::type __formal={...}) Line 314 boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >::operator()<boost::system::error_code,unsigned __int64>(const boost::system::error_code & a1={...}, const unsigned __int64 & a2=62) Line 103 boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64>::operator()() Line 120 boost::asio::asio_handler_invokeboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64> >(boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro* function=0x000000000799e830, ...) Line 64 + 0xa bytes boost_asio_handler_invoke_helpers::invokeboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >:(boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro& function={...}, boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > & context={...}) Line 41 boost::asio::detail::asio_handler_invokeboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::(boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro& function={...}, boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro* this_handler=0x000000000799e9e0) Line 155 boost_asio_handler_invoke_helpers::invokeboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64>,boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain(boost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro& function={...}, boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro& context={...}) Line 41 boost::asio::detail::strand_service::dispatchboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64> >(boost::asio::detail::strand_service::strand_impl * & impl=0x0000000002861680, boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::erro* handler=0x000000000799e9e0) Line 65 + 0x15 bytes boost::asio::io_service::strand::dispatchboost::asio::detail::binder2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system::error_code,unsigned __int64> >(const boost::asio::detail::binder2boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > >,boost::system& handler={...}) Line 151 boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > >::operator()<boost::system::error_code,unsigned __int64>(const boost::system::error_code & arg1={...}, const unsigned __int64 & arg2=62) Line 79 + 0x77 bytes boost::asio::detail::write_opboost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >::operator()(const boost::system::error_code & ec={...}, unsigned __int64 bytes_transferred=62, int start=0) Line 188 boost::asio::detail::binder2boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>::operator()() Line 120 boost::asio::detail::rewrapped_handlerboost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::() Line 172 boost::asio::asio_handler_invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocke(boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket* function=0x000000000799ec80, ...) Line 64 + 0xa bytes invoke< ?? :: ?? >(boost::asio::detail::rewrapped_handlerboost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket& function={...}, boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > & context={...}) Line 41 asio_handler_invoke< ?? :: ?? >(boost::asio::detail::rewrapped_handlerboost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket& function={...}, boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket* this_handler=0x000000000799ee20) Line 240 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection(boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket& function={...}, boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket& context={...}) Line 41 boost::asio::detail::completion_handler<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<w(boost::asio::detail::win_iocp_io_service * owner=0x000000000285cc40, boost::asio::detail::win_iocp_operation * base=0x000000000f65f7a0, boost::system::error_code __formal={...}, boost::system::error_code __formal={...}) Line 66 + 0xf bytes boost::asio::detail::strand_service::dispatch<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connec(boost::asio::detail::strand_service::strand_impl * & impl=0x0000000002861680, boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocket* handler=0x000000000799f020) Line 92 + 0x40 bytes boost::asio::io_service::strand::dispatch<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection(const boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,web& handler={...}) Line 151 boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_serviceboost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websock(boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::log& function={...}, boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpointwebsocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const &>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> >* this_handler=0x000000000799f380) Line 206 + 0x4b bytes boost_asio_handler_invoke_helpers::invokeboost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shared_ptr<websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection> > >,boost::arg<1> > > > >,boost::system::error_code,unsigned __int64>,boost::asio::detail::wrapped_handlerboost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websocketpp::connection<websocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger,websocketpp::role::serverwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection,websocketpp::socket::plainwebsocketpp::endpoint<websocketpp::role::server,websocketpp::socket::plain,websocketpp::log::logger >::connection>,boost::system::error_code const & __ptr64>,boost::_bi::list2boost::_bi::value<boost::shar(boost::asio::detail::binder2<boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp >,std::vectorboost::asio::const_buffer,std::allocator<boost::asio::const_buffer >,boost::asio::detail::transfer_all_t,boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,websoc

    opened by ellonnic 14
  • Can't compile anything with latest version of standalone asio

    Can't compile anything with latest version of standalone asio

    I'm compiling with gcc 7.3.0 on Ubuntu 18.04

    I'm using the latest master branch of websocketpp and standalone asio from here https://github.com/chriskohlhoff/asio/tree/84e9a48ae6ff040311dfdd9bd4b8e761832509fd

    I'm not sure if you can fix this or it's an issue with asio but I want to let you know about this.

    Here's my code: example0.cpp

    #define ASIO_STANDALONE
    #include <websocketpp/config/asio_client.hpp>
    
    int main() {
    	return 0;
    }
    

    CMakeList.txt

    cmake_minimum_required (VERSION 3.6)
    project(example)
    
    add_executable(hello-example
    	example0.cpp
    )
    
    target_include_directories(hello-example PUBLIC /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/)
    target_include_directories(hello-example PUBLIC /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/)
    find_package(Threads REQUIRED)
    target_link_libraries(hello-example PUBLIC ssl crypto Threads::Threads)
    

    Here's the Errors:

    [email protected]:~/Documents/repositories/sleepy-discord-private/examples/hello/build$ cmake ..
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/build
    [email protected]:~/Documents/repositories/sleepy-discord-private/examples/hello/build$ make
    Scanning dependencies of target hello-example
    [ 50%] Building CXX object CMakeFiles/hello-example.dir/example0.cpp.o
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘asio::execution_context& asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::context() [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:178:22: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘context’
         return executor_.context();
                ~~~~~~~~~~^~~~~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘void asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::on_work_started() [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:168:15: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘on_work_started’
         executor_.on_work_started();
         ~~~~~~~~~~^~~~~~~~~~~~~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘void asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::on_work_finished() [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:173:15: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘on_work_finished’
         executor_.on_work_finished();
         ~~~~~~~~~~^~~~~~~~~~~~~~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘void asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::dispatch(asio::executor::function&&) [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:183:15: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘dispatch’
         executor_.dispatch(ASIO_MOVE_CAST(function)(f), allocator_);
         ~~~~~~~~~~^~~~~~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘void asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::post(asio::executor::function&&) [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:188:15: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘post’
         executor_.post(ASIO_MOVE_CAST(function)(f), allocator_);
         ~~~~~~~~~~^~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘void asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::defer(asio::executor::function&&) [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:193:15: error: ‘class std::reference_wrapper<asio::io_context>’ has no member named ‘defer’
         executor_.defer(ASIO_MOVE_CAST(function)(f), allocator_);
         ~~~~~~~~~~^~~~~
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp: In instantiation of ‘bool asio::executor::impl< <template-parameter-1-1>, <template-parameter-1-2> >::equals(const asio::executor::impl_base*) const [with Executor = std::reference_wrapper<asio::io_context>; Allocator = std::allocator<void>]’:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:6:1:   required from here
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: error: no match for ‘operator==’ (operand types are ‘const std::reference_wrapper<asio::io_context>’ and ‘const std::reference_wrapper<asio::io_context>’)
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/iterator:66:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/buffers_iterator.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:43,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stream_iterator.h:130:5: note: candidate: template<class _Tp, class _CharT, class _Traits, class _Dist> bool std::operator==(const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>&, const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>&)
         operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stream_iterator.h:130:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/random:51:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/random.hpp:54,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/random/random_device.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:58,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/random.tcc:1878:5: note: candidate: template<class _RealType1> bool std::operator==(const std::normal_distribution<_RealType>&, const std::normal_distribution<_RealType>&)
         operator==(const std::normal_distribution<_RealType>& __d1,
         ^~~~~~~~
    /usr/include/c++/7/bits/random.tcc:1878:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::normal_distribution<_RealType>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/map:62:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/parser.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/request.hpp:34,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:47,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_multimap.h:1061:5: note: candidate: template<class _Key, class _Tp, class _Compare, class _Alloc> bool std::operator==(const std::multimap<_Key, _Tp, _Compare, _Alloc>&, const std::multimap<_Key, _Tp, _Compare, _Alloc>&)
         operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_multimap.h:1061:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::multimap<_Key, _Tp, _Compare, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/map:61:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/parser.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/request.hpp:34,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:47,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_map.h:1395:5: note: candidate: template<class _Key, class _Tp, class _Compare, class _Alloc> bool std::operator==(const std::map<_Key, _Tp, _Compare, _Alloc>&, const std::map<_Key, _Tp, _Compare, _Alloc>&)
         operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_map.h:1395:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::map<_Key, _Tp, _Compare, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/map:60:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/parser.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/request.hpp:34,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:47,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_tree.h:1533:5: note: candidate: template<class _Key, class _Val, class _KeyOfValue, class _Compare, class _Alloc> bool std::operator==(const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&, const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&)
         operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_tree.h:1533:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/map:60:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/parser.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/http/request.hpp:34,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:47,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_tree.h:406:5: note: candidate: template<class _Val> bool std::operator==(const std::_Rb_tree_iterator<_Tp>&, const std::_Rb_tree_const_iterator<_Val>&)
         operator==(const _Rb_tree_iterator<_Val>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_tree.h:406:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::_Rb_tree_iterator<_Tp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/locale_facets.h:48:0,
                     from /usr/include/c++/7/bits/basic_ios.h:37,
                     from /usr/include/c++/7/ios:44,
                     from /usr/include/c++/7/istream:38,
                     from /usr/include/c++/7/sstream:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/uri.hpp:37,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/connection.hpp:35,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:44,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/streambuf_iterator.h:204:5: note: candidate: template<class _CharT, class _Traits> bool std::operator==(const std::istreambuf_iterator<_CharT, _Traits>&, const std::istreambuf_iterator<_CharT, _Traits>&)
         operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
         ^~~~~~~~
    /usr/include/c++/7/bits/streambuf_iterator.h:204:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::istreambuf_iterator<_CharT, _Traits>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/vector:64:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/base.hpp:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:44,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_vector.h:1596:5: note: candidate: template<class _Tp, class _Alloc> bool std::operator==(const std::vector<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&)
         operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_vector.h:1596:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::vector<_Tp, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/functional:58:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/functional.hpp:53,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/base/endpoint.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/endpoint.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:44,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/std_function.h:770:5: note: candidate: template<class _Res, class ... _Args> bool std::operator==(std::nullptr_t, const std::function<_Res(_ArgTypes ...)>&)
         operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/std_function.h:770:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::function<_Res(_ArgTypes ...)>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/functional:58:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/functional.hpp:53,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/base/endpoint.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/iostream/endpoint.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:44,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/std_function.h:764:5: note: candidate: template<class _Res, class ... _Args> bool std::operator==(const std::function<_Res(_ArgTypes ...)>&, std::nullptr_t)
         operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/std_function.h:764:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::function<_Res(_ArgTypes ...)>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/mutex:42:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:60,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/system_error:311:3: note: candidate: bool std::operator==(const std::error_condition&, const std::error_condition&)
       operator==(const error_condition& __lhs,
       ^~~~~~~~
    /usr/include/c++/7/system_error:311:3: note:   no known conversion for argument 1 from ‘const std::reference_wrapper<asio::io_context>’ to ‘const std::error_condition&’
    /usr/include/c++/7/system_error:304:3: note: candidate: bool std::operator==(const std::error_condition&, const std::error_code&)
       operator==(const error_condition& __lhs, const error_code& __rhs) noexcept
       ^~~~~~~~
    /usr/include/c++/7/system_error:304:3: note:   no known conversion for argument 1 from ‘const std::reference_wrapper<asio::io_context>’ to ‘const std::error_condition&’
    /usr/include/c++/7/system_error:297:3: note: candidate: bool std::operator==(const std::error_code&, const std::error_condition&)
       operator==(const error_code& __lhs, const error_condition& __rhs) noexcept
       ^~~~~~~~
    /usr/include/c++/7/system_error:297:3: note:   no known conversion for argument 1 from ‘const std::reference_wrapper<asio::io_context>’ to ‘const std::error_code&’
    /usr/include/c++/7/system_error:292:3: note: candidate: bool std::operator==(const std::error_code&, const std::error_code&)
       operator==(const error_code& __lhs, const error_code& __rhs) noexcept
       ^~~~~~~~
    /usr/include/c++/7/system_error:292:3: note:   no known conversion for argument 1 from ‘const std::reference_wrapper<asio::io_context>’ to ‘const std::error_code&’
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/thread:267:3: note: candidate: bool std::operator==(std::thread::id, std::thread::id)
       operator==(thread::id __x, thread::id __y) noexcept
       ^~~~~~~~
    /usr/include/c++/7/thread:267:3: note:   no known conversion for argument 1 from ‘const std::reference_wrapper<asio::io_context>’ to ‘std::thread::id’
    In file included from /usr/include/c++/7/memory:81:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr.h:378:5: note: candidate: template<class _Tp> bool std::operator==(std::nullptr_t, const std::shared_ptr<_Tp>&)
         operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr.h:378:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::shared_ptr<_Tp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:81:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr.h:373:5: note: candidate: template<class _Tp> bool std::operator==(const std::shared_ptr<_Tp>&, std::nullptr_t)
         operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr.h:373:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::shared_ptr<_Tp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:81:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr.h:368:5: note: candidate: template<class _Tp, class _Up> bool std::operator==(const std::shared_ptr<_Tp>&, const std::shared_ptr<_Up>&)
         operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr.h:368:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::shared_ptr<_Tp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/shared_ptr.h:52:0,
                     from /usr/include/c++/7/memory:81,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr_base.h:1420:5: note: candidate: template<class _Tp, __gnu_cxx::_Lock_policy _Lp> bool std::operator==(std::nullptr_t, const std::__shared_ptr<_Tp, _Lp>&)
         operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr_base.h:1420:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__shared_ptr<_Tp, _Lp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/shared_ptr.h:52:0,
                     from /usr/include/c++/7/memory:81,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr_base.h:1415:5: note: candidate: template<class _Tp, __gnu_cxx::_Lock_policy _Lp> bool std::operator==(const std::__shared_ptr<_Tp, _Lp>&, std::nullptr_t)
         operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr_base.h:1415:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__shared_ptr<_Tp, _Lp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/shared_ptr.h:52:0,
                     from /usr/include/c++/7/memory:81,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/shared_ptr_base.h:1409:5: note: candidate: template<class _Tp1, class _Tp2, __gnu_cxx::_Lock_policy _Lp> bool std::operator==(const std::__shared_ptr<_Tp1, _Lp>&, const std::__shared_ptr<_Tp2, _Lp>&)
         operator==(const __shared_ptr<_Tp1, _Lp>& __a,
         ^~~~~~~~
    /usr/include/c++/7/bits/shared_ptr_base.h:1409:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__shared_ptr<_Tp1, _Lp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:80:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/unique_ptr.h:694:5: note: candidate: template<class _Tp, class _Dp> bool std::operator==(std::nullptr_t, const std::unique_ptr<_Tp, _Dp>&)
         operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/unique_ptr.h:694:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::unique_ptr<_Tp, _Dp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:80:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/unique_ptr.h:689:5: note: candidate: template<class _Tp, class _Dp> bool std::operator==(const std::unique_ptr<_Tp, _Dp>&, std::nullptr_t)
         operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
         ^~~~~~~~
    /usr/include/c++/7/bits/unique_ptr.h:689:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::unique_ptr<_Tp, _Dp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:80:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/unique_ptr.h:683:5: note: candidate: template<class _Tp, class _Dp, class _Up, class _Ep> bool std::operator==(const std::unique_ptr<_Tp, _Dp>&, const std::unique_ptr<_Up, _Ep>&)
         operator==(const unique_ptr<_Tp, _Dp>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/unique_ptr.h:683:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::unique_ptr<_Tp, _Dp>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/unique_ptr.h:37:0,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/tuple:1397:5: note: candidate: template<class ... _TElements, class ... _UElements> constexpr bool std::operator==(const std::tuple<_Tps ...>&, const std::tuple<_Elements ...>&)
         operator==(const tuple<_TElements...>& __t,
         ^~~~~~~~
    /usr/include/c++/7/tuple:1397:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::tuple<_Tps ...>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/tuple:39:0,
                     from /usr/include/c++/7/bits/unique_ptr.h:37,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/array:252:5: note: candidate: template<class _Tp, long unsigned int _Nm> bool std::operator==(const std::array<_Tp, _Nm>&, const std::array<_Tp, _Nm>&)
         operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
         ^~~~~~~~
    /usr/include/c++/7/array:252:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::array<_Tp, _Nm>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/string:52:0,
                     from /usr/include/c++/7/stdexcept:39,
                     from /usr/include/c++/7/array:39,
                     from /usr/include/c++/7/tuple:39,
                     from /usr/include/c++/7/bits/unique_ptr.h:37,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/basic_string.h:6034:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> bool std::operator==(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)
         operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
         ^~~~~~~~
    /usr/include/c++/7/bits/basic_string.h:6034:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/string:52:0,
                     from /usr/include/c++/7/stdexcept:39,
                     from /usr/include/c++/7/array:39,
                     from /usr/include/c++/7/tuple:39,
                     from /usr/include/c++/7/bits/unique_ptr.h:37,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/basic_string.h:6022:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> bool std::operator==(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)
         operator==(const _CharT* __lhs,
         ^~~~~~~~
    /usr/include/c++/7/bits/basic_string.h:6022:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   mismatched types ‘const _CharT*’ and ‘std::reference_wrapper<asio::io_context>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/string:52:0,
                     from /usr/include/c++/7/stdexcept:39,
                     from /usr/include/c++/7/array:39,
                     from /usr/include/c++/7/tuple:39,
                     from /usr/include/c++/7/bits/unique_ptr.h:37,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/basic_string.h:6008:5: note: candidate: template<class _CharT> typename __gnu_cxx::__enable_if<std::__is_char<_Tp>::__value, bool>::__type std::operator==(const std::__cxx11::basic_string<_CharT>&, const std::__cxx11::basic_string<_CharT>&)
         operator==(const basic_string<_CharT>& __lhs,
         ^~~~~~~~
    /usr/include/c++/7/bits/basic_string.h:6008:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__cxx11::basic_string<_CharT>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/string:52:0,
                     from /usr/include/c++/7/stdexcept:39,
                     from /usr/include/c++/7/array:39,
                     from /usr/include/c++/7/tuple:39,
                     from /usr/include/c++/7/bits/unique_ptr.h:37,
                     from /usr/include/c++/7/memory:80,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/basic_string.h:6000:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> bool std::operator==(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)
         operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
         ^~~~~~~~
    /usr/include/c++/7/bits/basic_string.h:6000:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/iosfwd:40:0,
                     from /usr/include/c++/7/memory:72,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/postypes.h:216:5: note: candidate: template<class _StateT> bool std::operator==(const std::fpos<_StateT>&, const std::fpos<_StateT>&)
         operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
         ^~~~~~~~
    /usr/include/c++/7/bits/postypes.h:216:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::fpos<_StateT>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:63:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/allocator.h:152:5: note: candidate: template<class _Tp> bool std::operator==(const std::allocator<_Tp1>&, const std::allocator<_Tp1>&)
         operator==(const allocator<_Tp>&, const allocator<_Tp>&)
         ^~~~~~~~
    /usr/include/c++/7/bits/allocator.h:152:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::allocator<_Tp1>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/memory:63:0,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/allocator.h:146:5: note: candidate: template<class _T1, class _T2> bool std::operator==(const std::allocator<_Tp1>&, const std::allocator<_T2>&)
         operator==(const allocator<_T1>&, const allocator<_T2>&)
         ^~~~~~~~
    /usr/include/c++/7/bits/allocator.h:146:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::allocator<_Tp1>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/stl_algobase.h:67:0,
                     from /usr/include/c++/7/memory:62,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_iterator.h:1124:5: note: candidate: template<class _Iterator> bool std::operator==(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)
         operator==(const move_iterator<_Iterator>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_iterator.h:1124:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::move_iterator<_IteratorL>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/stl_algobase.h:67:0,
                     from /usr/include/c++/7/memory:62,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_iterator.h:1118:5: note: candidate: template<class _IteratorL, class _IteratorR> bool std::operator==(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)
         operator==(const move_iterator<_IteratorL>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_iterator.h:1118:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::move_iterator<_IteratorL>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/stl_algobase.h:67:0,
                     from /usr/include/c++/7/memory:62,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_iterator.h:337:5: note: candidate: template<class _IteratorL, class _IteratorR> bool std::operator==(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)
         operator==(const reverse_iterator<_IteratorL>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_iterator.h:337:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::reverse_iterator<_Iterator>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/stl_algobase.h:67:0,
                     from /usr/include/c++/7/memory:62,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_iterator.h:299:5: note: candidate: template<class _Iterator> bool std::operator==(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
         operator==(const reverse_iterator<_Iterator>& __x,
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_iterator.h:299:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::reverse_iterator<_Iterator>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
                     from /usr/include/c++/7/memory:62,
                     from /usr/include/c++/7/thread:39,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/thread.hpp:59,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/concurrency/basic.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/core_client.hpp:38,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /usr/include/c++/7/bits/stl_pair.h:443:5: note: candidate: template<class _T1, class _T2> constexpr bool std::operator==(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)
         operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
         ^~~~~~~~
    /usr/include/c++/7/bits/stl_pair.h:443:5: note:   template argument deduction/substitution failed:
    In file included from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/executor.hpp:336:0,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_socket.hpp:27,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio.hpp:21,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/common/asio.hpp:52,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/base.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/connection.hpp:31,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/transport/asio/endpoint.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/websocketpp/websocketpp/config/asio_client.hpp:32,
                     from /home/hao-qi/Documents/repositories/sleepy-discord-private/examples/hello/example0.cpp:2:
    /home/hao-qi/Documents/repositories/sleepy-discord-private/deps/asio/asio/include/asio/impl/executor.hpp:217:22: note:   ‘const std::reference_wrapper<asio::io_context>’ is not derived from ‘const std::pair<_T1, _T2>’
         return executor_ == *static_cast<const Executor*>(e->target());
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CMakeFiles/hello-example.dir/build.make:62: recipe for target 'CMakeFiles/hello-example.dir/example0.cpp.o' failed
    make[2]: *** [CMakeFiles/hello-example.dir/example0.cpp.o] Error 1
    CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/hello-example.dir/all' failed
    make[1]: *** [CMakeFiles/hello-example.dir/all] Error 2
    Makefile:83: recipe for target 'all' failed
    make: *** [all] Error 2
    
    Bug Asio Transport 
    opened by yourWaifu 13
  • WebSocket++ 0.3.x experimental branch

    WebSocket++ 0.3.x experimental branch

    We have tried using this version and it works well as a websocket server.Is this branch an official release??? Since the descriptions quotes a list of features to be implemented would like to know when the official release would be??

    0.3.x Support Request 
    opened by cjn 13
  • Access to HTTP request bodies

    Access to HTTP request bodies

    Feature request to allow WebSocket++ to handle POST/PUT/ other non-GET methods with request bodies.

    Example usage case: File Uploads (#164)

    This is low priority because WebSocket++ is primarily a WebSocket server and not an HTTP server. However, the request is not particularly hard and WebSocket++ can already be hacked a bit to do it so a more clean/stable interface might be useful.

    Feature Needs Testing 
    opened by zaphoyd 13
  • handle_read_frame error: websocketpp.transport:7 (End of File)

    handle_read_frame error: websocketpp.transport:7 (End of File)

    Sometimes when browser closes connection to my websocketpp server, I get:

    [2016-09-09 19:40:53] [error] handle_read_frame error: websocketpp.transport:7 (End of File)
    

    How I can fix it?

    opened by ghost 12
  • pause_reading terminates a connection when using asio

    pause_reading terminates a connection when using asio

    the pause_reading intended for flow control maybe broken in asio mode.

    client               server
            ------1---->                     ok
                         pause_reading    ok
            ------2---->                     ok since the read is queued already
            ------3---->                     err, connection is reset in client side but remains normal in server side
                         resume_reading  err, bad connection in server side
    
    opened by JasonYuchen 1
  • How to get a hostname from connection handle in on_tls_init callback

    How to get a hostname from connection handle in on_tls_init callback

    Hello! I would like to verify TLS certificate. A convenient way of doing that seems to be ctx->set_verify_callback(asio::ssl::rfc2818_verification("host.name"));, but it needs a hostname passed to it.

    Handler for set_tls_init_handler has connection_hdl parameter and I would expect to be able to somehow retrieve hostname from it, but I have not succeeded. In particular:

    auto wss_connection = client_endpoint_tls.get_con_from_hdl(hdl);
    ws_connection->get_uri(); // returns nullptr
    ws_connection->get_request().get_uri(); // returns emtpy string
    
    std::shared_ptr<asio::ssl::context> on_tls_init(websocketpp::connection_hdl hdl)
    {
        auto ctx = std::make_shared<asio::ssl::context>(asio::ssl::context::sslv23);
        try {
            ctx->set_options(asio::ssl::context::default_workarounds
                | asio::ssl::context::no_sslv2
                | asio::ssl::context::no_sslv3
                | asio::ssl::context::single_dh_use);
    
            ctx->set_verify_mode(asio::ssl::verify_peer);
            ctx->set_default_verify_paths();
            ctx->set_verify_callback(asio::ssl::rfc2818_verification("ws.ifelse.io"));
        } catch (std::exception& e) {
            LOG_ERROR("Couldn't initialize ssl context: {}", e.what());
        }
        return ctx;
    }
    
    opened by karlisolte 4
  • handle_read_frame error

    handle_read_frame error

    I left a connection listening to streamed data but returned to find this:

    [2022-07-05 12:12:36] [info] asio async_read_at_least error: asio.ssl.stream:1 (stream truncated) [2022-07-05 12:12:36] [error] handle_read_frame error: websocketpp.transport:2 (Underlying Transport Error)

    I'm using the FTX (crypto exchange) Github project code:

    https://github.com/ftexchange/ftx

    opened by cpp77 0
  • Update cmake minimum version

    Update cmake minimum version

    Running cmake gives the following warning

    CMake Deprecation Warning at CMakeLists.txt:5 (cmake_minimum_required):
      Compatibility with CMake < 2.8.12 will be removed from a future version of
      CMake.
    
      Update the VERSION argument <min> value or use a ...<max> suffix to tell
      CMake that the project does not need compatibility with older versions.
    

    I'd like to submit a PR to update from 2.8.8 to 2.8.12 like the warning suggests. Wanted to see if there would be any issues with upgrading first though.

    opened by devintrowbridge 0
Releases(0.8.2)
  • 0.8.2(Apr 19, 2020)

    This is a bug fix patch that fixes a major issue affecting compatibility with newer versions of the Asio library (including the one bundled in Boost 1.70 and higher). It also includes some documentation, cmake, and OpenSSL compatibility fixes.

    Details

    • Compatibility: Removes the use of make_shared in a number of cases where it would be incompatible with newer versions of ASIO. Thank you Stefan Floeren for the patch. #810 #814 #862 #843 #794 #808
    • Examples: Update print_client_tls example to remove use of deprecated OpenSSL functions.
    • CMake: Update cmake installer to better handle dependencies when using g++ on MacOS. Thank you Luca Palano for reporting and a patch. #831
    • CMake: Update cmake installer to use a variable for the include directory improving the ability of the install to be customized. Thank you Schrijvers Luc and Gianfranco Costamanga for reporting and a patch. #842
    Source code(tar.gz)
    Source code(zip)
  • 0.8.1(Jul 16, 2018)

    This is a bug fix patch to fix a major test suite regression introduced in 0.8.0 and adjust installation behavior to make downstream packaging easier.

    Note: There are no changes to the library itself, only to the test and installation systems.

    Details

    • Test Suite: Adjust test suite to match behavior introduced in 0.8.0. Thank you Gianfranco Costamagna for reporting and a patch. #731
    • CMake: Update cmake installer to only install library files globally. Thank you Gianfraco Costamanga for reporting and a patch. #732
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Jul 12, 2018)

    • Examples: Add print_client example. This demonstrates a minimal non-TLS client that connects to a server and prints out the messages it receives.
    • Examples: Add print_client_tls example. This demonstrates a minimal TLS client, including basic support via Asio+OpenSSL for certificate chain and hostname verification.
    • Feature: Add getter for all headers to the HTTP parsers. This allows a wrapping library to enumerate all headers to send upstream. Thank you Jupp Müller for reporting and an initial pull request.
    • Improvement: Move the socket_init_handler to execute as a part of init_asio rather than connection pre_init. This allows setting of socket options prior to the bind/listen/accept system calls. Thank you ChristianRobl3D for reporting #530.
    • Improvement: Timers in transport integration tests should only fail if their own test times out, rather than any test. #643 Thank you Alex Korotkin for reporting and a patch.
    • Improvement: Preserve transport layer error codes in more cases, particularly during calls to endpoint::listen. #652 Thank you vadz for reporting and patches.
    • Compatibility: Make sure the chrono library used by Boost/Asio is in sync with what the websocketpp is using. Thank you Flow86 for reporting and a patch.
    • Compatibility: Update telemetry_client to use a slightly more cross platform method of sleeping. Should work on windows now. Thank you Meir Yanovich for reporting.
    • Compatibility: Updated permessage-deflate support to reflect that the zlib library does not actually support a sliding window size of 256 bits. WebSocket++ will no longer negotiate 256 bit deflate windows. If the user of the library tries to request a 256 bit window a 512 bit window will be specified instead (This was the previous behavior). #596 #653 Thank you Vinnie Falco and Gianfranco Costamagna for reporting.
    • Compatibility: Better error handling and logging in cases where extension requests parse correctly but negotiation fails.
    • Compatibility: Removed custom handling of SSL_R_SHORT_READ error condition. This error code no longer exists in modern versions of OpenSSL and causes a build error. It wasn't being used for anything particularly important (slightly improving error reporting) and there isn't a great replacement. #599 Thank you Gianfranco Costamagna for reporting.
    • Compatibility: Add missing <stdint> headers. Fixes issues with g++ 5.4.0. #638 Thank you Alex Korotkin for reporting and a patch.
    • Compatibility: Remove the use of std::auto_ptr and std::binary_function from builds with C++11 or later. These features are deprecated and were removed entirely in C++17. This change allows building WebSocket++ on C++17 compilers. #592 Thank you Michal Fojtak for reporting and a patch
    • Compatibility: Add 1014 close code and adds missing descriptions for codes 1012 and 1013. #589 Thank you jbwdevries and ronneke1996 for reporting and patches.
    • Compatibility: Add hooks to support mingw-std-threads C++11 thread and mutex polyfill library as an alternative to Boost. #608 Thank you Peter Taylor for reporting and an initial patch.
    • Compatibility: Changed the handshake connection token to 'Upgrade' from 'upgrade'. Technically this header is supposed to be processed case insensitively. In practice, there are browsers (such as Edge) that don't do this and they tend to use the uppercase value used as an example in RFC6455. Thank you Johann Bauer for reporting and a patch. #727
    • Bug: Store loggers in shared pointers to avoid crashes related to connections trying to write logs entries after their respective endpoint has been deallocated. Thank you Thalhammer for reporting and Jupp Müller for the patch. #539 #501
    • Bug: Change default listen backlog from 0 to socket_base::max_connections. #549. Thank you derwassi and zwelab for reporting and na1pir for providing access to hardware to debug the issue.
    • Bug: Fix a crash in the accept loop when get_connection fails. #551 Thank you Walter Gray for a patch.
    • Bug/Documentation: Fix incorrect example code that used websocketpp::lib::error_code instead of websocketpp::exception. Thank you heretic13 for reporting
    • Bug: Fix uninitialized shared pointer in Asio transport test suite. #647 Thank you Alex Korotkin for reporting and a patch.
    • Bug: Fix a thread safety issue in the permessage-deflate extension that caused message corruption when sending compressed messages from a different thread than the main I/O thread. #615 Thank you KyleNyenhuis and Pieter De Gendt for reporting and a patch.
    • Bug: Fix an undefined behavior issue performing a 64 bit wide shift on a 64 bit value. #636 Thank you Gregor Jasny for reporting and a patch
    • Bug: Fix some compile issues with ASIO_STANDALONE. #662 #665 Thank you chronoxor and Guillaume Egles for reporting and patches.
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Feb 22, 2016)

    • MINOR BREAKING SOCKET POLICY CHANGE: Asio transport socket policy method cancel_socket will now return lib::asio::error_code instead of void. Custom Asio transport socket policies will need to be updated accordingly. This does not affect anyone using the bundled socket policies.
    • Feature: Basic support for the permessage-deflate extension. #344
    • Feature: Allow accessing the local endpoint when using the Asio transport. This allows inspection of the address and port in cases where they are chosen by the operating system rather than the user. Thank you Andreas Weis and Muzahid Hussain for reporting and related code. #458
    • Feature: Add support for subprotocols in Hybi00. Thank you Lukas Obermann for reporting and a patch. #518
    • Improvement: Better automatic std::chrono feature detection for Visual Studio
    • Improvement: Major refactoring to bundled CMake build system. CMake can now be used to build all of the examples and the test suite. Thank you Thijs Wenker for a significant portion of this code. #378, #435, #449
    • Improvement: In build environments where lib::error_code and lib::asio::error_code match (such as using boost::asio with boost::system_error or standalone asio with std::system_error, transport errors are passed through natively rather than being reported as a translated pass_through error type.
    • Improvement: Add a get_transport_error method to Asio transport connections to allow retrieving a machine readable native transport error.
    • Improvement: Add connection::get_response, connection::get_response_code, and connection::get_response_msg methods to allow accessing additional information about the HTTP responses that WebSocket++ sends. #465 Thank youFlow86 for reporting.
    • Improvement: Removes use of empty strings ("") in favor of string::clear() and string::empty(). This avoids generating unnecessary temporary objects. #468 Thank you Vladislav Yaroslavlev for reporting and a patch.
    • Documentation: Adds an example demonstrating the use of external io_service
    • Documentation: Adds a simple echo_client example.
    • Documentation: Begins migration of the web based user manual into Doxygen.
    • Bug: Fix memory leak when init_asio produces an error. #454 Thank you Mark Grimes for reporting and fixing.
    • Bug: Fix crash when processing a specially crafted HTTP header. Thank you Eli Fidler for reporting, test cases, and a patch. #456
    • Bug: Fix an issue where standalone Asio builds that use TLS would not compile due to lingering boost code. #448 Thank you mjsp for reporting
    • Bug: Fix an issue where canceling a socket could throw an exception on some older Windows XP platforms. It now prints an appropriate set of log messages instead. Thank you Thijs Wenker for reporting and researching solutions. #460
    • Bug: Fix an issue where deferred HTTP connections that start sending a very long response before their HTTP handler ends would result in a second set of HTTP headers being injected into the output. Thank you Kevin Smith for reporting and providing test case details. #443
    • Bug: Fix an issue where the wrong type of strand was being created. Thank you Bastien Brunnenstein for reporting and a patch. #462
    • Bug: Fix an issue where TLS includes were broken for Asio Standalone builds. Thank you giachi and Bastien Brunnenstein for reporting. #491
    • Bug: Remove the use of cached read and write handlers in the Asio transport. This feature caused memory leaks when the io_service the connection was running on was abruptly stopped. There isn't a clean and safe way of using this optimization without global state and the associated locks. The locks perform worse. Thank you Xavier Gibert for reporting, test cases, and code. Fixes #490.
    • Bug: Fix a heap buffer overflow when checking very short URIs. Thank you Xavier Gibert for reporting and a patch #524
    • Compatibility: Fixes a number of build & config issues on Visual Studio 2015
    • Compatibility: Removes non-standards compliant masking behavior. #395, #469
    • Compatibility: Replace deprecated use of auto_ptr on systems where unique_ptr is available.
    Source code(tar.gz)
    Source code(zip)
  • 0.6.0-permessage-deflate(Jun 7, 2015)

    This is a companion release to WebSocket++/0.6.0 with support for the upcoming permessage-deflate WebSocket compression extension. Support is complete except for fine tuning documentation.

    If no major issues are encountered with this pre-release version, the next mainline release of WebSocket++ (likely 0.7.x) will include support for permessage-deflate.

    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Jun 2, 2015)

    • MINOR BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be required to include a new method void set_uri(uri_ptr u). An implementation is not required. The stub transport policy includes an example stub method that can be added to any existing custom transport policy to fulfill this requirement. This does not affect anyone using the bundled transports or configs.
    • MINOR BREAKING SOCKET POLICY CHANGE: Custom asio transport socket policies will now be required to include a new method void set_uri(uri_ptr u). Like with the transport layer, an implementation is not required. This does not affect anyone using the bundled socket policies.
    • MINOR BREAKING DEPENDENCY CHANGE: When using Boost versions greater than or equal to 1.49 in C++03 mode, libboost-chrono is needed now instead of libboost-date_time. Users with C++11 compilers or using Boost versions 1.48 and earlier are not affected. Note: This change affects the bundled unit test suite.
    • Feature: WebSocket++ Asio transport policy can now be used with the standalone version of Asio (1.8.0+) when a C++11 compiler and standard library are present. This means that it is possible now to use WebSocket++'s Asio transport entirely without Boost. Thank you Robert Seiler for proof of concept code that was used as a guide for this implementation. Fixes #324
    • Feature: Adds a vectored/scatter-gather write handler to the iostream transport.
    • Feature: Adds the ability to defer sending an HTTP response until sometime after the http_handler is run. This allows processing of long running http handlers to defer their response until it is ready without blocking the network thread. references #425
    • Improvement: echo_server_tls has been update to demonstrate how to configure it for Mozilla's recommended intermediate and modern TLS security profiles.
    • Improvement: endpoint::set_timer now uses a steady clock provided by boost::chrono or std::chrono where available instead of the non-monotonic system clock. Thank you breyed for reporting. fixes #241
    • Improvement: Outgoing TLS connections to servers using the SNI extension to choose a certificate will now work. Thank you moozzyk for reporting. Fixes #400
    • Improvement: Removes an unnecessary mutex lock in get_con_from_hdl.
    • Cleanup: Asio transport policy has been refactored to remove many Boost dependencies. On C++03 compilers the boost::noncopyable dependency has been removed and the boost::date_time dependency has been replaced with the newer boost::chrono when possible. On C++11 compilers the boost::aligned_storage and boost::date_time dependencies are gone, replaced with equivalent C++11 standard library features.
    • Bug: Fixes a potential dangling pointer and inconsistent error message handling in websocketpp::exception. #432 Thank you Tom Swirly for the fix.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Feb 27, 2015)

    • Bug: Fixes an issue where some frame data was counted against the max header size limit, resulting in connections that included a lot of frame data immediately after the opening handshake to fail.
    • Bug: Fix a typo in the name of the set method for max_http_body_size. #406 Thank you jplatte for reporting.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Jan 22, 2015)

    • BREAKING UTILITY CHANGE: Deprecated methods http::parser::parse_headers, http::response::parse_complete, and http::request::parse_complete have been removed.
    • Security: Disabled SSLv3 in example servers.
    • Feature: Adds basic support for accessing HTTP request bodies in the http handler. #181
    • Feature: Adds the ability to register a shutdown handler when using the iostream transport. This provides a clean interface for triggering the shut down of external sockets and other cleanup without hooking in to higher level WebSocket handlers.
    • Feature: Adds the ability to register a write handler when using the iostream transport. This handler can be used to handle transport output in place of registering an ostream to write to.
    • Feature: Adds a new logging policy that outputs to syslog. #386 Thank you Tom Hughes for submitting the initial version of this policy.
    • Improvement: Message payload logging now prints text for text messages rather than binary.
    • Improvement: Overhaul of handshake state machine. Should make it impossible for exceptions to bubble out of transport methods like io_service::run.
    • Improvement: Overhaul of handshake error reporting. Fail handler error codes will be more detailed and precise. Adds new [fail] and [http] logging channels that log failed websocket connections and successful HTTP connections respectively. A new aggregate channel package, alevel::access_core, allows enabling connect, disconnect, fail, and http together. Successful HTTP connections will no longer trigger a fail handler.
    • Improvement: Ability to terminate connection during an http handler to cleanly suppress the default outgoing HTTP response.
    • Documentation: Add Sending & Receiving Messages step to chapter one of the utility_client tutorial. Update utility_client example to match.
    • Cleanup: Removes unused files & STL includes. Adds required STL includes. Normalizes include order.
    • Bug: Fixes a fatal state error when a handshake response is completed immediately after that handshake times out. #389
    • Bug: MinGW fixes; C++11 feature detection, localtime use. #393 Thank you Schebb for reporting, code, and testing.
    • Bug: Fixes an issue where websocketpp::exception::what() could return an out of scope pointer. #397 Thank you fabioang for reporting.
    • Bug: Fixes an issue where endpoints were not reset properly after a call to endpoint::listen failed. #390 Thank you wyyqyl for reporting.
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Nov 4, 2014)

    • BREAKING API CHANGE: All WebSocket++ methods now throw an exception of type websocketpp::exception which derives from std::exception. This normalizes all exception types under the standard exception hierarchy and allows WebSocket++ exceptions to be caught in the same statement as others. The error code that was previously thrown is wrapped in the exception object and can be accessed via the websocketpp::exception::code() method.
    • BREAKING API CHANGE: Custom logging policies have some new required constructors that take generic config settings rather than pointers to std::ostreams. This allows writing logging policies that do not involve the use of std::ostream. This does not affect anyone using the built in logging policies.
    • BREAKING UTILITY CHANGE: websocketpp::lib::net::htonll and websocketpp::lib::net::ntohll have been prefixed with an underscore to avoid conflicts with similarly named macros in some operating systems. If you are using the WebSocket++ provided 64 bit host/network byte order functions you will need to switch to the prefixed versions.
    • BREAKING UTILITY CHANGE: The signature of base64_encode has changed from websocketpp::base64_encode(unsigned char const *, unsigned int) to websocketpp::base64_encode(unsigned char const *, size_t).
    • BREAKING UTILITY CHANGE: The signature of sha1::calc has changed from websocketpp::sha1::calc(void const *, int, unsigned char *) to websocketpp::sha1::calc(void const *, size_t, unsigned char *)
    • Feature: Adds incomplete minimal_server and minimal_client configs that can be used to build custom configs without pulling in the dependencies of core or core_client. These configs will offer a stable base config to future-proof custom configs.
    • Improvement: Core library no longer has std::iostream as a dependency. std::iostream is still required for the optional iostream logging policy and iostream transport.
    • Bug: C++11 Chrono support was being incorrectly detected by the boost_config header. Thank you Max Dmitrichenko for reporting and a patch.
    • Bug: use of std::put_time is now guarded by a unique flag rather than a chrono library flag. Thank you Max Dmitrichenko for reporting.
    • Bug: Fixes non-thread safe use of std::localtime. #347 #383
    • Compatibility: Adjust usage of std::min to be more compatible with systems that define a min(...) macro.
    • Compatibility: Removes unused parameters from all library, test, and example code. This assists with those developing with -Werror and -Wunused-parameter #376
    • Compatibility: Renames ntohll and htonll methods to avoid conflicts with platform specific macros. #358 #381, #382 Thank you logotype, unphased, svendjo
    • Cleanup: Removes unused functions, fixes variable shadow warnings, normalizes all whitespace in library, examples, and tests to 4 spaces. #376
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Aug 9, 2014)

    • Feature: Adds start_perpetual and stop_perpetual methods to asio transport These may be used to replace manually managed asio::io_service::work objects
    • Feature: Allow setting pong and handshake timeouts at runtime.
    • Feature: Allows changing the listen backlog queue length.
    • Feature: Split tcp init into pre and post init.
    • Feature: Adds URI method to extract query string from URI. Thank you Banaan for code. #298
    • Feature: Adds a compile time switch to asio transport config to disable certain multithreading features (some locks, asio strands)
    • Feature: Adds the ability to pause reading on a connection. Paused connections will not read more data from their socket, allowing TCP flow control to work without blocking the main thread.
    • Feature: Adds the ability to specify whether or not to use the SO_REUSEADDR TCP socket option. The default for this value has been changed from true to false.
    • Feature: Adds the ability to specify a maximum message size.
    • Feature: Adds close::status::get_string(...) method to look up a human readable string given a close code value.
    • Feature: Adds connection::read_all(...) method to iostream transport as a convenience method for reading all data into the connection buffer without the end user needing to manually loop on read_some.
    • Improvement: Open, close, and pong timeouts can be disabled entirely by setting their duration to 0.
    • Improvement: Numerous performance improvements. Including: tuned default buffer sizes based on profiling, caching of handler binding for async reads/writes, non-malloc allocators for read/write handlers, disabling of a number of questionably useful range sanity checks in tight inner loops.
    • Improvement: Cleaned up the handling of TLS related errors. TLS errors will now be reported with more detail on the info channel rather than all being tls_short_read or pass_through. In addition, many cases where a TLS short read was in fact expected are no longer classified as errors. Expected TLS short reads and quasi-expected socket shutdown related errors will no longer be reported as unclean WebSocket shutdowns to the application. Information about them will remain in the info error channel for debugging purposes.
    • Improvement: start_accept and listen errors are now reported to the caller either via an exception or an ec parameter.
    • Improvement: Outgoing writes are now batched for improved message throughput and reduced system call and TCP frame overhead.
    • Bug: Fix some cases of calls to empty lib::function objects.
    • Bug: Fix memory leak of connection objects due to cached handlers holding on to reference counted pointers. #310 Thank you otaras for reporting.
    • Bug: Fix issue with const endpoint accessors (such as get_user_agent) not compiling due to non-const mutex use. #292 Thank you logofive for reporting.
    • Bug: Fix handler allocation crash with multithreaded io_service.
    • Bug: Fixes incorrect whitespace handling in header parsing. #301 Thank you Wolfram Schroers for reporting
    • Bug: Fix a crash when parsing empty HTTP headers. Thank you Thingol for reporting.
    • Bug: Fix a crash following use of the stop_listening function. Thank you Thingol for reporting.
    • Bug: Fix use of variable names that shadow function parameters. The library should compile cleanly with -Wshadow now. Thank you giszo for reporting. #318
    • Bug: Fix an issue where set_open_handshake_timeout was ignored by server code. Thank you Robin Rowe for reporting.
    • Bug: Fix an issue where custom timeout values weren't being propagated from endpoints to new connections.
    • Bug: Fix a number of memory leaks related to server connection failures. #323 #333 #334 #335 Thank you droppy and aydany for reporting and patches. reporting.
    • Compatibility: Fix compile time conflict with Visual Studio's MIN/MAX macros. Thank you Robin Rowe for reporting.
    • Documentation: Examples and test suite build system now defaults to clang on OS X
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0-alpha4(Oct 11, 2013)

    • HTTP requests ending normally are no longer logged as errors. Thank you Banaan for reporting. #294
    • Eliminates spurious expired timers in certain error conditions. Thank you Banaan for reporting. #295
    • Consolidates all bundled library licenses into the COPYING file. #294
    • Updates bundled sha1 library to one with a cleaner interface and more straight-forward license. Thank you lotodore for reporting and Evgeni Golov for reviewing. #294
    • Re-introduces strands to asio transport, allowing io_service thread pools to be used (with some limitations).
    • Removes endpoint code that kept track of a connection list that was never used anywhere. Removes a lock and reduces connection creation/deletion complexity from O(log n) to O(1) in the number of connections.
    • A number of internal changes to transport APIs
    • Deprecates iostream transport readsome in favor of read_some which is more consistent with the naming of the rest of the library.
    • Adds preliminary signaling to iostream transport of eof and fatal transport errors
    • Updates transport code to use shared pointers rather than raw pointers to prevent asio from retaining pointers to connection methods after the connection goes out of scope. #293 Thank you otaras for reporting.
    • Fixes an issue where custom headers couldn't be set for client connections Thank you Jerry Win and Wolfram Schroers for reporting.
    • Fixes a compile error on visual studio when using interrupts. Thank you Javier Rey Neira for reporting this.
    • Adds new 1012 and 1013 close codes per IANA registry
    • Add set_remote_endpoint method to iostream transport.
    • Add set_secure method to iostream transport.
    • Fix typo in .gitattributes file. Thank you jstarasov for reporting this. #280
    • Add missing locale include. Thank you Toninoso for reporting this. #281
    • Refactors asio_transport endpoint and adds full documentation and exception free varients of all methods.
    • Removes asio_transport endpoint method cancel(). Use stop_listen() instead
    • Wrap internal io_service run_one() method
    • Suppress error when trying to shut down a connection that was already closed
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0-alpha3(Jul 16, 2013)

    • Minor refactor to bundled sha1 library
    • HTTP header comparisons are now case insensitive. #220, #275
    • Refactors URI to be exception free and not use regular expressions. This eliminates the dependency on boost or C++11 regex libraries allowing native C++11 usage on GCC 4.4 and higher and significantly reduces staticly built binary sizes.
    • Updates handling of Server and User-Agent headers to better handle custom settings and allow suppression of these headers for security purposes.
    • Fix issue where pong timeout handler always fired. Thank you Steven Klassen for reporting this bug.
    • Add ping and pong endpoint wrapper methods
    • Add get_request() pass through method to connection to allow calling methods specific to the HTTP policy in use.
    • Fix issue compile error with WEBSOCKETPP_STRICT_MASKING enabled and another issue where WEBSOCKETPP_STRICT_MASKING was not applied to incoming messages. Thank you Petter Norby for reporting and testing these bugs. #264
    • Add additional macro guards for use with boost_config. Thank you breyed for testing and code. #261
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0-alpha2(Jul 2, 2013)

    • Fix a regression that caused servers being sent two close frames in a row to end a connection uncleanly. #259
    • Fix a regression that caused spurious frames following a legitimate close frames to erroneously trigger handlers. #258
    • Change default HTTP response error code when no http_handler is defined from 500/Internal Server Error to 426/Upgrade Required
    • Remove timezone from logger timestamp to work around issues with the Windows implimentation of strftime. Thank you breyed for testing and code. #257
    • Switch integer literals to char literals to improve VCPP compatibility. Thank you breyed for testing and code. #257
    • Add MSVCPP warning suppression for the bundled SHA1 library. Thank you breyed for testing and code. #257
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0-alpha1(Jul 2, 2013)

  • 0.2.3-dev(Jul 2, 2013)

    • Removes use of 64 bit pointers that don't work properly on some 32 bit systems. Thank you jonberling. #223
    • Fixes missing boost header. Thank you thinkski. #208
    • Additional fixes related to multithreaded endpoint listen. Thank you matthewaveryusa, zarnce, and lucasvickers. #168 #172
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2dev(Jul 2, 2013)

    First versioned release of the 0.2.x branch

    • Fixes infinite accept loop when closing a multithreaded endpoint. Thank you matthewaveryusa. #168
    Source code(tar.gz)
    Source code(zip)
C++ websocket client/server library

WebSocket++ (0.8.2) WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol. It allows integrating WebSocket client an

Peter Thorson 5.7k Jul 31, 2022
websocket and http client and server library, coming with ws, a command line swiss army knife utility

Hello world IXWebSocket is a C++ library for WebSocket client and server development. It has minimal dependencies (no boost), is very simple to use an

Machine Zone, Inc. 326 Jul 31, 2022
Mongoose Embedded Web Server Library - a multi-protocol embedded networking library with TCP/UDP, HTTP, WebSocket, MQTT built-in protocols, async DNS resolver, and non-blocking API.

Mongoose - Embedded Web Server / Embedded Networking Library Mongoose is a networking library for C/C++. It implements event-driven non-blocking APIs

Cesanta Software 8.6k Jul 29, 2022
A Lightweight and fully asynchronous WebSocket client library based on libev

libuwsc(中文) A Lightweight and fully asynchronous WebSocket client library based on libev for Embedded Linux. And provide Lua-binding. Why should I cho

Jianhui Zhao 284 Jul 7, 2022
Cross-platform, efficient, customizable, and robust asynchronous HTTP/WebSocket server C++14 library with the right balance between performance and ease of use

What Is RESTinio? RESTinio is a header-only C++14 library that gives you an embedded HTTP/Websocket server. It is based on standalone version of ASIO

Stiffstream 871 Jul 28, 2022
Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services.

Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services. The project is unique among realtime push solutions in that it is designed to address the needs of API creators. Pushpin is transparent to clients and integrates easily into an API stack.

Fanout 3.1k Aug 4, 2022
WSServer is a fast, configurable, and extendable WebSocket Server for UNIX systems written in C (C11).

WSServer a C WebSocket Server WSServer is a fast, configurable, and extendable WebSocket Server for UNIX systems written in C (C11). As of version 2.0

Morten Houmøller Nygaard 167 Jul 26, 2022
Various utilities such as WebServer, JSON, WebSocket server, REST framework

DumaisLib This is a library containing several utilities for some projects of Patrick Dumais. Previously, the libraries were all individual but it bec

Patrick Dumais 25 Feb 22, 2022
An easy to use and powerful open source websocket library written in C.

libwebsock Easy to use C library for websockets This library allows for quick and easy development of applications that use the websocket protocol, wi

Jonathan Hall 46 May 4, 2022
BingBing 54 Jul 27, 2022
Small and fast cross-platform networking library, with support for messaging, IPv6, HTTP, SSL and WebSocket.

frnetlib Frnetlib, is a cross-platform, small and fast networking library written in C++. There are no library dependencies (unless you want to use SS

Fred Nicolson 22 May 16, 2022
This is a small library that allows to stream a Dear ImGui scene to multiple WebSocket clients at once

imgui-ws Dear ImGui over WebSockets This is a small library that allows to stream a Dear ImGui scene to multiple WebSocket clients at once. This is ac

Georgi Gerganov 293 Jul 22, 2022
HTTP and WebSocket built on Boost.Asio in C++11

HTTP and WebSocket built on Boost.Asio in C++11 Branch Linux/OSX Windows Coverage Documentation Matrix master develop Contents Introduction Appearance

Boost.org 3.5k Jul 31, 2022
Custom WebSocket implementation in C for educational and recreational purposes.

C WebSockets WARNING! The library is in an active development state and is not even alpha yet. Use it at your own risk. Nothing is documented, anythin

Tsoding 17 May 25, 2022
cuehttp is a modern c++ middleware framework for http(http/https)/websocket(ws/wss).

cuehttp 简介 cuehttp是一个使用Modern C++(C++17)编写的跨平台、高性能、易用的HTTP/WebSocket框架。基于中间件模式可以方便、高效、优雅的增加功能。cuehttp基于boost.asio开发,使用picohttpparser进行HTTP协议解析。内部依赖了nl

xcyl 26 Jul 21, 2022
Simple embeddable C++11 async tcp,http and websocket serving.

net11 Simple embeddable C++11 async tcp,http and websocket serving. What is it? An easily embeddable C++11 networking library designed to make buildin

Jonas Lund 9 Mar 28, 2020
A C++ header-only HTTP/HTTPS server and client library

cpp-httplib A C++11 single-file header-only cross platform HTTP/HTTPS library. It's extremely easy to setup. Just include the httplib.h file in your c

null 7.5k Aug 5, 2022
A network library for client/server games written in C++

yojimbo yojimbo is a network library for client/server games written in C++. It's designed around the networking requirements of competitive multiplay

The Network Protocol Company 2.2k Aug 4, 2022
single header C(99) library to implement client-server network code for games

single header C(99) library to implement client-server network code for games

Nathan 222 Jul 28, 2022