Browse Source

Kernel: Block writes while we're establishing the TCP connection

Previously we would not block the caller until the connection was
established and would instead return EPIPE for the first send() call
which then likely caused the caller to abandon the socket.

This was broken by 0625342.
Gunnar Beutner 4 years ago
parent
commit
c3d702431a
1 changed files with 3 additions and 0 deletions
  1. 3 0
      Kernel/Net/TCPSocket.cpp

+ 3 - 0
Kernel/Net/TCPSocket.cpp

@@ -584,6 +584,9 @@ bool TCPSocket::can_write(const FileDescription& file_description, size_t size)
     if (!IPv4Socket::can_write(file_description, size))
     if (!IPv4Socket::can_write(file_description, size))
         return false;
         return false;
 
 
+    if (m_state == State::SynSent || m_state == State::SynReceived)
+        return false;
+
     if (!file_description.is_blocking())
     if (!file_description.is_blocking())
         return true;
         return true;