Zebediah Figura : server: Record the error for connected and connectionless sockets sockets in sock_error().

Alexandre Julliard julliard at winehq.org
Thu Jul 21 17:04:07 CDT 2022


Module: wine
Branch: master
Commit: a2f2b773fb9a55bd73affe4c0ac9e3ff50f6ce03
URL:    https://gitlab.winehq.org/wine/wine/-/commit/a2f2b773fb9a55bd73affe4c0ac9e3ff50f6ce03

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Mon Jul 11 23:24:38 2022 -0500

server: Record the error for connected and connectionless sockets sockets in sock_error().

As long as we do it for connecting and listening sockets, do it here for the
remaining socket types as well.

---

 server/sock.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/server/sock.c b/server/sock.c
index 1224c3b4674..373236cab56 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -645,20 +645,35 @@ static inline int sock_error( struct sock *sock )
     socklen_t len = sizeof(error);
 
     getsockopt( get_unix_fd(sock->fd), SOL_SOCKET, SO_ERROR, (void *)&error, &len);
-    if (sock->state == SOCK_CONNECTING)
+
+    switch (sock->state)
     {
+    case SOCK_UNCONNECTED:
+        break;
+
+    case SOCK_CONNECTING:
         if (error)
             sock->errors[AFD_POLL_BIT_CONNECT_ERR] = error;
         else
             error = sock->errors[AFD_POLL_BIT_CONNECT_ERR];
-    }
-    else if (sock->state == SOCK_LISTENING)
-    {
+        break;
+
+    case SOCK_LISTENING:
         if (error)
             sock->errors[AFD_POLL_BIT_ACCEPT] = error;
         else
             error = sock->errors[AFD_POLL_BIT_ACCEPT];
+        break;
+
+    case SOCK_CONNECTED:
+    case SOCK_CONNECTIONLESS:
+        if (error)
+            sock->errors[AFD_POLL_BIT_HUP] = error;
+        else
+            error = sock->errors[AFD_POLL_BIT_HUP];
+        break;
     }
+
     return error;
 }
 




More information about the wine-cvs mailing list