浏览代码

Kernel: Return EPIPE when trying to write to an unconnected socket

When attempting to write to a socket that is not connected or - for
connection-less protocols - doesn't have a peer address set we should
return EPIPE instead of blocking the thread.
Gunnar Beutner 4 年之前
父节点
当前提交
0625342
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      Kernel/Net/IPv4Socket.cpp

+ 4 - 1
Kernel/Net/IPv4Socket.cpp

@@ -170,7 +170,7 @@ bool IPv4Socket::can_read(const FileDescription&, size_t) const
 
 bool IPv4Socket::can_write(const FileDescription&, size_t) const
 {
-    return is_connected();
+    return true;
 }
 
 PortAllocationResult IPv4Socket::allocate_local_port_if_needed()
@@ -206,6 +206,9 @@ KResultOr<size_t> IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer&
         m_peer_port = ntohs(ia.sin_port);
     }
 
+    if (!is_connected() && m_peer_address.is_zero())
+        return EPIPE;
+
     auto routing_decision = route_to(m_peer_address, m_local_address, bound_interface());
     if (routing_decision.is_zero())
         return EHOSTUNREACH;