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