diff --git a/websocketpp/endpoint.hpp b/websocketpp/endpoint.hpp index de4b5f668b..d6e0ec7a8d 100644 --- a/websocketpp/endpoint.hpp +++ b/websocketpp/endpoint.hpp @@ -287,10 +287,13 @@ protected: * * @return the connection_ptr. May be NULL if the handle was invalid. */ - connection_ptr get_con_from_hdl(connection_hdl hdl) { + connection_ptr get_con_from_hdl(connection_hdl hdl, lib::error_code & ec) { scoped_lock_type lock(m_mutex); connection_ptr con = lib::static_pointer_cast( hdl.lock()); + if (!con) { + ec = error::make_error_code(error::bad_connection); + } return con; } diff --git a/websocketpp/impl/endpoint_impl.hpp b/websocketpp/impl/endpoint_impl.hpp index 23e1c64013..591dd01301 100644 --- a/websocketpp/impl/endpoint_impl.hpp +++ b/websocketpp/impl/endpoint_impl.hpp @@ -91,11 +91,8 @@ template void endpoint::interrupt(connection_hdl hdl, lib::error_code & ec) { - connection_ptr con = get_con_from_hdl(hdl); - if (!con) { - ec = error::make_error_code(error::bad_connection); - return; - } + connection_ptr con = get_con_from_hdl(hdl,ec); + if (ec) {return;} m_alog.write(log::alevel::devel,"Interrupting connection"+con.get()); @@ -113,11 +110,8 @@ template void endpoint::send(connection_hdl hdl, const std::string& payload, frame::opcode::value op, lib::error_code & ec) { - connection_ptr con = get_con_from_hdl(hdl); - if (!con) { - ec = error::make_error_code(error::bad_connection); - return; - } + connection_ptr con = get_con_from_hdl(hdl,ec); + if (ec) {return;} ec = con->send(payload,op); } @@ -135,11 +129,9 @@ template void endpoint::send(connection_hdl hdl, message_ptr msg, lib::error_code & ec) { - connection_ptr con = get_con_from_hdl(hdl); - if (!con) { ec = error::make_error_code(error::bad_connection); - return; - } + connection_ptr con = get_con_from_hdl(hdl,ec); + if (ec) {return;} ec = con->send(msg); }