瀏覽代碼

Kernel: Check can_write for blocking write

This way the socket write buffer sizes are respected, and things that
exceed them get sent EAGAIN.
Robin Burchell 6 年之前
父節點
當前提交
d8b74c8c86
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      Kernel/Process.cpp

+ 4 - 2
Kernel/Process.cpp

@@ -853,8 +853,10 @@ ssize_t Process::sys$writev(int fd, const struct iovec* iov, int iov_count)
 ssize_t Process::do_write(FileDescriptor& descriptor, const byte* data, int data_size)
 {
     ssize_t nwritten = 0;
-    if (!descriptor.is_blocking())
-        return descriptor.write(data, data_size);
+    if (!descriptor.is_blocking()) {
+        if (!descriptor.can_write())
+            return -EAGAIN;
+    }
 
     while (nwritten < data_size) {
 #ifdef IO_DEBUG