@@ -124,6 +124,7 @@ void set_##__FIELD__(__TYPE__ const& l) \
124124 SYNTHESIS_SETTER (error_listener, error_listener) // socket io errors
125125
126126 SYNTHESIS_SETTER (con_listener, close_listener) // socket io errors
127+
127128#undef SYNTHESIS_SETTER
128129
129130 void clear_listeners ()
@@ -158,6 +159,8 @@ void set_##__FIELD__(__TYPE__ const& l) \
158159
159160 void on_message_packet (packet const & packet);
160161
162+ void on_disconnect ();
163+
161164 private:
162165
163166 // Message Parsing callbacks.
@@ -282,6 +285,14 @@ void set_##__FIELD__(__TYPE__ const& l) \
282285 {
283286 packet p (packet::type_disconnect,m_nsp);
284287 __send_packet (p);
288+
289+ if (!m_connection_timer)
290+ {
291+ m_connection_timer.reset (new boost::asio::deadline_timer (m_client->get_io_service ()));
292+ }
293+ boost::system::error_code ec;
294+ m_connection_timer->expires_from_now (boost::posix_time::milliseconds (3000 ), ec);
295+ m_connection_timer->async_wait (lib::bind (&socket::impl::on_close, this ));
285296 }
286297 }
287298
@@ -331,6 +342,18 @@ void set_##__FIELD__(__TYPE__ const& l) \
331342 __send_connect ();
332343 }
333344
345+ void socket::impl::on_disconnect ()
346+ {
347+ NULL_GUARD (m_client);
348+ if (m_connected)
349+ {
350+ m_connected = false ;
351+ while (!m_packet_queue.empty ()) {
352+ m_packet_queue.pop ();
353+ }
354+ }
355+ }
356+
334357 void socket::impl::on_message_packet (packet const & p)
335358 {
336359 NULL_GUARD (m_client);
@@ -455,7 +478,7 @@ void set_##__FIELD__(__TYPE__ const& l) \
455478 }
456479 m_connection_timer.reset ();
457480 LOG (" Connection timeout" <<std::endl);
458- this ->on_close ();
481+ this ->on_disconnect ();
459482 }
460483
461484 void socket::impl::__send_packet (sio::packet &p)
@@ -583,6 +606,11 @@ void set_##__FIELD__(__TYPE__ const& l) \
583606 {
584607 m_impl->on_message_packet (p);
585608 }
609+
610+ void socket::on_disconnect ()
611+ {
612+ m_impl->on_disconnect ();
613+ }
586614}
587615
588616
0 commit comments