Bläddra i källkod

Kernel: connect() should EISCONN on already-connected LocalSocket

This was causing us to try and accept the same client socket multiple
times on the server side, tripping an assertion in Socket::accept().
Andreas Kling 5 år sedan
förälder
incheckning
0596ab880e
1 ändrade filer med 2 tillägg och 0 borttagningar
  1. 2 0
      Kernel/Net/LocalSocket.cpp

+ 2 - 0
Kernel/Net/LocalSocket.cpp

@@ -105,6 +105,8 @@ KResult LocalSocket::connect(FileDescription& description, const sockaddr* addre
         return KResult(-EINVAL);
     if (address->sa_family != AF_LOCAL)
         return KResult(-EINVAL);
+    if (is_connected())
+        return KResult(-EISCONN);
 
     const sockaddr_un& local_address = *reinterpret_cast<const sockaddr_un*>(address);
     char safe_address[sizeof(local_address.sun_path) + 1] = { 0 };