Zebediah Figura : server: Record the error for connected and connectionless sockets sockets in sock_error().
Module: wine Branch: master Commit: a2f2b773fb9a55bd73affe4c0ac9e3ff50f6ce03 URL: https://gitlab.winehq.org/wine/wine/-/commit/a2f2b773fb9a55bd73affe4c0ac9e3f... Author: Zebediah Figura <zfigura(a)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; }
participants (1)
-
Alexandre Julliard