[PATCH 2/5] server: Store the socket errors as an array of Unix errno values.
Zebediah Figura
z.figura12 at gmail.com
Mon Jun 14 00:41:48 CDT 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
server/sock.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/server/sock.c b/server/sock.c
index 2a22bb2340b..026188e79af 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -167,7 +167,7 @@ struct sock
user_handle_t window; /* window to send the message to */
unsigned int message; /* message to send */
obj_handle_t wparam; /* message wparam (socket handle) */
- unsigned int errors[AFD_POLL_BIT_COUNT]; /* event errors */
+ int errors[AFD_POLL_BIT_COUNT]; /* event errors */
timeout_t connect_time;/* time the socket was connected */
struct sock *deferred; /* socket that waits for a deferred accept */
struct async_queue read_q; /* queue for asynchronous reads */
@@ -486,7 +486,7 @@ static void sock_wake_up( struct sock *sock )
enum afd_poll_bit event = event_bitorder[i];
if (events & (1 << event))
{
- lparam_t lparam = afd_poll_flag_to_win32(1 << event) | (sock->errors[event] << 16);
+ lparam_t lparam = afd_poll_flag_to_win32(1 << event) | (sock_get_error( sock->errors[event] ) << 16);
post_message( sock->window, sock->message, sock->wparam, lparam );
}
}
@@ -851,7 +851,7 @@ static int sock_dispatch_asyncs( struct sock *sock, int event, int error )
return event;
}
-static void post_socket_event( struct sock *sock, enum afd_poll_bit event_bit, unsigned int error )
+static void post_socket_event( struct sock *sock, enum afd_poll_bit event_bit, int error )
{
unsigned int event = (1 << event_bit);
@@ -874,12 +874,12 @@ static void sock_dispatch_events( struct sock *sock, enum connection_state prevs
if (event & POLLOUT)
post_socket_event( sock, AFD_POLL_BIT_CONNECT, 0 );
if (event & (POLLERR | POLLHUP))
- post_socket_event( sock, AFD_POLL_BIT_CONNECT_ERR, sock_get_error( error ) );
+ post_socket_event( sock, AFD_POLL_BIT_CONNECT_ERR, error );
break;
case SOCK_LISTENING:
if (event & (POLLIN | POLLERR | POLLHUP))
- post_socket_event( sock, AFD_POLL_BIT_ACCEPT, sock_get_error( error ) );
+ post_socket_event( sock, AFD_POLL_BIT_ACCEPT, error );
break;
case SOCK_CONNECTED:
@@ -894,7 +894,7 @@ static void sock_dispatch_events( struct sock *sock, enum connection_state prevs
post_socket_event( sock, AFD_POLL_BIT_OOB, 0 );
if (event & (POLLERR | POLLHUP))
- post_socket_event( sock, AFD_POLL_BIT_HUP, sock_get_error( error ) );
+ post_socket_event( sock, AFD_POLL_BIT_HUP, error );
break;
}
@@ -2457,13 +2457,13 @@ DECL_HANDLER(get_socket_event)
reply->mask = afd_poll_flag_to_win32( sock->mask );
reply->pmask = afd_poll_flag_to_win32( sock->pending_events );
- errors[FD_READ_BIT] = sock->errors[AFD_POLL_BIT_READ];
- errors[FD_WRITE_BIT] = sock->errors[AFD_POLL_BIT_WRITE];
- errors[FD_OOB_BIT] = sock->errors[AFD_POLL_BIT_OOB];
- errors[FD_ACCEPT_BIT] = sock->errors[AFD_POLL_BIT_ACCEPT];
- errors[FD_CONNECT_BIT] = sock->errors[AFD_POLL_BIT_CONNECT_ERR];
- if (!(errors[FD_CLOSE_BIT] = sock->errors[AFD_POLL_BIT_HUP]))
- errors[FD_CLOSE_BIT] = sock->errors[AFD_POLL_BIT_RESET];
+ errors[FD_READ_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_READ] );
+ errors[FD_WRITE_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_WRITE] );
+ errors[FD_OOB_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_OOB] );
+ errors[FD_ACCEPT_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_ACCEPT] );
+ errors[FD_CONNECT_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_CONNECT_ERR] );
+ if (!(errors[FD_CLOSE_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_HUP] )))
+ errors[FD_CLOSE_BIT] = sock_get_error( sock->errors[AFD_POLL_BIT_RESET] );
set_reply_data( errors, min( get_reply_max_size(), sizeof(errors) ));
if (req->service)
--
2.30.2
More information about the wine-devel
mailing list