+ // Active polling (without using events)
+ //
+ // NOTE: this duplicates some of the code in OnRequest (lost
+ // connection and connection establishment handling) but
+ // this doesn't hurt. It has to be here because the event
+ // might be a bit delayed, and it has to be in OnRequest
+ // as well because maybe the Wait functions are not being
+ // used.
+ //
+ // Do this at least once (important if timeout == 0, when
+ // we are just polling). Also, if just polling, do not yield.
+
+ while (state == -1)
+ {
+ result = GSocket_Select(m_socket, flags | GSOCK_LOST_FLAG);
+
+ // Incoming connection (server) or connection established (client)
+ if (result & GSOCK_CONNECTION_FLAG)
+ {
+ m_connected = TRUE;
+ m_establishing = FALSE;
+ return TRUE;
+ }
+
+ // Data available or output buffer ready
+ if ((result & GSOCK_INPUT_FLAG) || (result & GSOCK_OUTPUT_FLAG))
+ {
+ return TRUE;
+ }
+
+ // Connection lost
+ if (result & GSOCK_LOST_FLAG)
+ {
+ m_connected = FALSE;
+ m_establishing = FALSE;
+ return (flags & GSOCK_LOST_FLAG);
+ }