Sfoglia il codice sorgente

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 anni fa
parent
commit
c3d702431a
1 ha cambiato i file con 3 aggiunte e 0 eliminazioni
  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))
         return false;
 
+    if (m_state == State::SynSent || m_state == State::SynReceived)
+        return false;
+
     if (!file_description.is_blocking())
         return true;