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.
This commit is contained in:
Gunnar Beutner 2021-06-05 13:03:06 +02:00 committed by Andreas Kling
parent 51c2c69357
commit 0625342382

View file

@ -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;