浏览代码

pixelflut: Ignore EAGAIN errors

Very contested servers are likely to cause EAGAIN socket errors on the
client. Since these errors are not supposed to be fatal, just try
sending the pixel again.

This was tested successfully against massively contested 37c3 pixelflut
servers.
kleines Filmröllchen 1 年之前
父节点
当前提交
fdfd4b5e3d
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      Userland/Utilities/pixelflut.cpp

+ 6 - 1
Userland/Utilities/pixelflut.cpp

@@ -118,7 +118,12 @@ ErrorOr<void> Client::send_current_pixel()
     auto hex_without_hash = hex.substring(1);
     auto hex_without_hash = hex.substring(1);
 
 
     // PX <x> <y> <hex color>
     // PX <x> <y> <hex color>
-    TRY(m_socket->write_formatted("PX {} {} {}\n", m_current_point.x() + m_image_offset.x(), m_current_point.y() + m_image_offset.y(), hex_without_hash));
+    while (true) {
+        auto result = m_socket->write_formatted("PX {} {} {}\n", m_current_point.x() + m_image_offset.x(), m_current_point.y() + m_image_offset.y(), hex_without_hash);
+        // Very contested servers will cause frequent EAGAIN errors.
+        if (!result.is_error() || result.error().code() != EAGAIN)
+            break;
+    }
     return {};
     return {};
 }
 }