]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/socket.cpp
Bugfix
[wxWidgets.git] / src / common / socket.cpp
index a38097d124f7d72a05c00f99fa744295e25fa0c2..5036742c4d37d24dad94859e4445bcb972511dd5 100644 (file)
@@ -244,8 +244,13 @@ wxUint32 wxSocketBase::_Read(void* buffer, wxUint32 nbytes)
   nbytes -= total;
   buffer  = (char *)buffer + total;
 
-  // If the socket is invalid or we got all the data, return now
-  if (!m_socket || !nbytes)
+  // Return now in one of the following cases:
+  // - the socket is invalid,
+  // - we got all the data,
+  // - we got *some* data and we are not using wxSOCKET_WAITALL.
+  if ( !m_socket ||
+       !nbytes ||
+       ((total != 0) && !(m_flags & wxSOCKET_WAITALL)) )
     return total;
 
   // Possible combinations (they are checked in this order)
@@ -466,7 +471,7 @@ wxUint32 wxSocketBase::_Write(const void *buffer, wxUint32 nbytes)
           break;
 
       ret = GSocket_Write(m_socket, (const char *)buffer, nbytes);
-
+      
       if (ret > 0)
       {
         total  += ret;
@@ -653,7 +658,7 @@ bool wxSocketBase::_Wait(long seconds,
     {
       m_connected = FALSE;
       m_establishing = FALSE;
-      return (flags & GSOCK_LOST_FLAG);
+      return (flags & GSOCK_LOST_FLAG) != 0;
     }
 
     // Wait more?
@@ -893,13 +898,16 @@ void wxSocketBase::OnRequest(wxSocketNotify notification)
 
   // Schedule the event
 
-  wxSocketEventFlags flag = -1;
+  wxSocketEventFlags flag = 0;
   switch (notification)
   {
     case GSOCK_INPUT:      flag = GSOCK_INPUT_FLAG; break;
     case GSOCK_OUTPUT:     flag = GSOCK_OUTPUT_FLAG; break;
     case GSOCK_CONNECTION: flag = GSOCK_CONNECTION_FLAG; break;
     case GSOCK_LOST:       flag = GSOCK_LOST_FLAG; break;
+    default:
+      wxLogWarning( _("wxSocket: unknown event!."));
+      return;
   }
 
   if (((m_eventmask & flag) == flag) && m_notify)