From f17632706e2f1a35b8d59e919ec43cffe501f873 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 30 Dec 2008 15:07:04 +0000 Subject: [PATCH] handle loss of connection explicitly in Read/Write() to fix socket IO under Unix after the last change git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57670 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/socket.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/socket.cpp b/src/common/socket.cpp index dae0bbe..0125402 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -811,10 +811,6 @@ wxUint32 wxSocketBase::DoRead(void* buffer_, wxUint32 nbytes) nbytes -= total; buffer += total; - // we can't read anything [more] if we're not connected - if ( !m_connected ) - return total; - while ( nbytes ) { // our socket is non-blocking so Read() will return immediately if @@ -823,7 +819,7 @@ wxUint32 wxSocketBase::DoRead(void* buffer_, wxUint32 nbytes) // GUI events and, even more importantly, we must do this under Windows // where we're not going to get notifications about socket being ready // for reading before we read all the existing data from it - const int ret = m_impl->Read(buffer, nbytes); + const int ret = m_connected ? m_impl->Read(buffer, nbytes) : 0; if ( ret == -1 ) { if ( m_impl->GetLastError() == wxSOCKET_WOULDBLOCK ) @@ -996,12 +992,16 @@ wxUint32 wxSocketBase::DoWrite(const void *buffer_, wxUint32 nbytes) const char *buffer = static_cast(buffer_); wxCHECK_MSG( buffer, 0, "NULL buffer" ); - if ( !m_connected ) - return 0; - wxUint32 total = 0; while ( nbytes ) { + if ( !m_connected ) + { + if ( (m_flags & wxSOCKET_WAITALL) || !total ) + SetError(wxSOCKET_IOERR); + break; + } + const int ret = m_impl->Write(buffer, nbytes); if ( ret == -1 ) { -- 2.7.4