- /* Check known state first */
- result |= (GSOCK_CONNECTION_FLAG & socket->m_detected & flags);
- result |= (GSOCK_LOST_FLAG & socket->m_detected & flags);
+ /* Check 'sticky' CONNECTION flag first */
+ result |= (GSOCK_CONNECTION_FLAG & socket->m_detected);
+
+ /* If we have already detected a LOST event, then don't try
+ * to do any further processing.
+ */
+ if ((socket->m_detected & GSOCK_LOST_FLAG) != 0)
+ {
+ socket->m_establishing = FALSE;
+
+ return (GSOCK_LOST_FLAG & flags);
+ }