Revert commit 5d8dff15

Index: src/Maxima.cpp
--- src/Maxima.cpp.orig
+++ src/Maxima.cpp
@@ -116,17 +116,34 @@ Maxima::~Maxima() {
 }
 
 bool Maxima::Write(const void *buffer, std::size_t length) {
-  if(!buffer)
+  if (!m_socketOutputData.IsEmpty()) {
+    if (buffer && length)
+      m_socketOutputData.AppendData(buffer, length);
+    buffer = m_socketOutputData.GetData();
+    length = m_socketOutputData.GetDataLen();
+  }
+  if (!length)
     return false;
-  if (length == 0)
-    return false;
   m_socket->Write(buffer, length);
   if (m_socket->Error() && m_socket->LastError() != wxSOCKET_WOULDBLOCK) {
     wxThreadEvent *sendevent = new wxThreadEvent(EVT_MAXIMA);
     sendevent->SetInt(WRITE_ERROR);
     QueueEvent(sendevent);
-    return false;
+    m_socketOutputData.Clear();
+    return true;
   }
+  auto const wrote = m_socket->LastWriteCount();
+  if (wrote < length) {
+    auto *const source = reinterpret_cast<const char *>(buffer);
+    auto const leftToWrite = length - wrote;
+    if (m_socketOutputData.IsEmpty())
+      m_socketOutputData.AppendData(source + wrote, leftToWrite);
+    else {
+      memmove(m_socketOutputData.GetData(), source + wrote, leftToWrite);
+      m_socketOutputData.SetDataLen(leftToWrite);
+    }
+  } else
+    m_socketOutputData.Clear();
   return true;
 }
 
