+ wxUint32 total = 0;
+ int ret = 1;
+
+ // If the socket is invalid, return immediately
+ if (!m_socket)
+ return 0;
+
+ // Possible combinations (they are checked in this order)
+ // wxSOCKET_NOWAIT
+ // wxSOCKET_WAITALL | wxSOCKET_BLOCK
+ // wxSOCKET_WAITALL
+ // wxSOCKET_BLOCK
+ // wxSOCKET_NONE
+ //
+ if (m_flags & wxSOCKET_NOWAIT)
+ {
+ GSocket_SetNonBlocking(m_socket, TRUE);
+ ret = GSocket_Write(m_socket, buffer, nbytes);
+ GSocket_SetNonBlocking(m_socket, FALSE);
+
+ if (ret > 0)
+ total = ret;
+ }
+ else if (m_flags & wxSOCKET_WAITALL)
+ {
+ while (ret > 0 && nbytes > 0)
+ {
+ if (!(m_flags & wxSOCKET_BLOCK) && !WaitForWrite())
+ break;
+
+ ret = GSocket_Write(m_socket, buffer, nbytes);
+
+ if (ret > 0)
+ {
+ total += ret;
+ buffer += ret;
+ nbytes -= ret;
+ }
+ }
+ }
+ else
+ {
+ if ((m_flags & wxSOCKET_BLOCK) || WaitForWrite())
+ {
+ ret = GSocket_Write(m_socket, buffer, nbytes);
+
+ if (ret > 0)
+ total = ret;
+ }
+ }
+
+ return total;
+}
+
+wxSocketBase& wxSocketBase::WriteMsg(const char *buffer, wxUint32 nbytes)
+{
+ wxUint32 total;
+ bool error;
+ int old_flags;