Zebediah Figura : server: Report the socket error in sock_poll_event() on POLLERR or POLLHUP.
Alexandre Julliard
julliard at winehq.org
Thu Jul 21 17:04:07 CDT 2022
Module: wine
Branch: master
Commit: 41cdc6674cd5882adc151ec7f4199c6b11c9227f
URL: https://gitlab.winehq.org/wine/wine/-/commit/41cdc6674cd5882adc151ec7f4199c6b11c9227f
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Mon Jul 11 23:38:34 2022 -0500
server: Report the socket error in sock_poll_event() on POLLERR or POLLHUP.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52815
---
dlls/ws2_32/tests/afd.c | 3 ++-
server/sock.c | 6 +++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/ws2_32/tests/afd.c b/dlls/ws2_32/tests/afd.c
index 9852d54ecb9..eb525c78c54 100644
--- a/dlls/ws2_32/tests/afd.c
+++ b/dlls/ws2_32/tests/afd.c
@@ -162,7 +162,8 @@ static void check_poll_(int line, SOCKET s, HANDLE event, int mask, int expect,
ok_(__FILE__, line)(out_params.count == 1, "got count %u\n", out_params.count);
ok_(__FILE__, line)(out_params.sockets[0].socket == s, "got socket %#Ix\n", out_params.sockets[0].socket);
todo_wine_if (todo) ok_(__FILE__, line)(out_params.sockets[0].flags == expect, "got flags %#x\n", out_params.sockets[0].flags);
- ok_(__FILE__, line)(!out_params.sockets[0].status, "got status %#x\n", out_params.sockets[0].status);
+ todo_wine_if (expect & AFD_POLL_RESET)
+ ok_(__FILE__, line)(!out_params.sockets[0].status, "got status %#x\n", out_params.sockets[0].status);
}
static void test_poll(void)
diff --git a/server/sock.c b/server/sock.c
index 373236cab56..a8c0b56c2bc 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -1145,6 +1145,9 @@ static void sock_poll_event( struct fd *fd, int event )
if (debug_level)
fprintf(stderr, "socket %p select event: %x\n", sock, event);
+ if (event & (POLLERR | POLLHUP))
+ error = sock_error( sock );
+
switch (sock->state)
{
case SOCK_UNCONNECTED:
@@ -1153,7 +1156,6 @@ static void sock_poll_event( struct fd *fd, int event )
case SOCK_CONNECTING:
if (event & (POLLERR|POLLHUP))
{
- error = sock_error( sock );
sock->state = SOCK_UNCONNECTED;
event &= ~POLLOUT;
}
@@ -1166,8 +1168,6 @@ static void sock_poll_event( struct fd *fd, int event )
break;
case SOCK_LISTENING:
- if (event & (POLLERR|POLLHUP))
- error = sock_error( sock );
break;
case SOCK_CONNECTED:
More information about the wine-cvs
mailing list