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
This commit is contained in:
Vadim Zeitlin
2008-12-30 15:07:04 +00:00
parent f98f168e6c
commit f17632706e

View File

@@ -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<const char *>(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 )
{