X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d34f724d42cc7c2d584fc9d7e9ee5465388ee3f2..f9cff6e17341ea95da89eaa27f78b32f11291e12:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 3227bdb429..032b8f094e 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -213,7 +213,11 @@ public: { m_socket->m_reading = false; - m_socket->m_impl->ReenableEvents(wxSOCKET_INPUT_FLAG); + // connection could have been lost while reading, in this case calling + // ReenableEvents() would assert and is not necessary anyhow + wxSocketImpl * const impl = m_socket->m_impl; + if ( impl && impl->m_fd != INVALID_SOCKET ) + impl->ReenableEvents(wxSOCKET_INPUT_FLAG); } private: @@ -231,13 +235,15 @@ public: wxASSERT_MSG( !m_socket->m_writing, "write reentrancy?" ); m_socket->m_writing = true; - - m_socket->m_impl->ReenableEvents(wxSOCKET_OUTPUT_FLAG); } ~wxSocketWriteGuard() { m_socket->m_writing = false; + + wxSocketImpl * const impl = m_socket->m_impl; + if ( impl && impl->m_fd != INVALID_SOCKET ) + impl->ReenableEvents(wxSOCKET_OUTPUT_FLAG); } private: @@ -1607,20 +1613,29 @@ void wxSocketBase::OnRequest(wxSocketNotify notification) case wxSOCKET_CONNECTION: flag = wxSOCKET_CONNECTION_FLAG; + + // we're now successfully connected + m_connected = true; + m_establishing = false; + + // error was previously set to wxSOCKET_WOULDBLOCK, but this is not + // the case any longer + SetError(wxSOCKET_NOERROR); break; case wxSOCKET_LOST: flag = wxSOCKET_LOST_FLAG; + + // if we lost the connection the socket is now closed and not + // connected any more + m_connected = false; + m_closed = true; break; default: wxFAIL_MSG( "unknown wxSocket notification" ); } - // if we lost the connection the socket is now closed - if ( notification == wxSOCKET_LOST ) - m_closed = true; - // remember the events which were generated for this socket, we're going to // use this in DoWait() m_eventsgot |= flag;