+ // This duplicates some code in _Wait, but this doesn't
+ // hurt. It has to be here because we don't know whether
+ // the Wait functions will be used, and it has to be in
+ // _Wait as well because the event might be a bit delayed.
+
+ switch(req_evt)
+ {
+ case wxSOCKET_CONNECTION:
+ m_establishing = FALSE;
+ m_connected = TRUE;
+ break;
+
+ // If we are in the middle of a R/W operation, do not
+ // propagate events to users. Also, filter 'late' events
+ // which are no longer valid.
+
+ case wxSOCKET_INPUT:
+ if (m_reading || !GSocket_Select(m_socket, GSOCK_INPUT_FLAG))
+ return;
+ break;
+
+ case wxSOCKET_OUTPUT:
+ if (m_writing || !GSocket_Select(m_socket, GSOCK_OUTPUT_FLAG))
+ return;
+ break;
+
+ case wxSOCKET_LOST:
+ m_connected = FALSE;
+ m_establishing = FALSE;
+ break;
+
+ default:
+ break;
+ }
+
+ if (((m_neededreq & flag) == flag) && m_notify_state)
+ {
+ if (m_handler)
+ {
+ wxSocketEvent event(m_id);
+ event.m_socket = this;
+ event.m_event = req_evt;
+
+#if USE_DELAYED_EVENTS
+ wxPostEvent(m_handler, event);
+#else
+ m_handler->ProcessEvent(event);
+#endif
+ }
+
+ if (m_cbk)
+ m_cbk(*this, req_evt, m_cdata);
+ }