Zebediah Figura : ws2_32: Translate WSA_FLAG_OVERLAPPED to NT overlapped flags.

Alexandre Julliard julliard at winehq.org
Fri Sep 25 14:52:53 CDT 2020


Module: wine
Branch: master
Commit: 8fb897a5718767bb86c734c8ea90245aeb7bee47
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8fb897a5718767bb86c734c8ea90245aeb7bee47

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Thu Sep 24 22:21:00 2020 -0500

ws2_32: Translate WSA_FLAG_OVERLAPPED to NT overlapped flags.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ws2_32/socket.c |  5 +++--
 server/sock.c        | 12 ++++++++----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 1136ec87b9..f43c57bf9a 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -7716,7 +7716,8 @@ SOCKET WINAPI WSASocketW(int af, int type, int protocol,
 
     RtlInitUnicodeString(&string, afdW);
     InitializeObjectAttributes(&attr, &string, (flags & WSA_FLAG_NO_HANDLE_INHERIT) ? 0 : OBJ_INHERIT, NULL, NULL);
-    if ((status = NtOpenFile(&handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, 0)))
+    if ((status = NtOpenFile(&handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr,
+            &io, 0, (flags & WSA_FLAG_OVERLAPPED) ? 0 : FILE_SYNCHRONOUS_IO_NONALERT)))
     {
         WARN("Failed to create socket, status %#x.\n", status);
         WSASetLastError(NtStatusToWSAError(status));
@@ -7726,7 +7727,7 @@ SOCKET WINAPI WSASocketW(int af, int type, int protocol,
     create_params.family = unixaf;
     create_params.type = unixtype;
     create_params.protocol = protocol;
-    create_params.flags = flags & ~WSA_FLAG_NO_HANDLE_INHERIT;
+    create_params.flags = flags & ~(WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED);
     if ((status = NtDeviceIoControlFile(handle, NULL, NULL, NULL, &io,
             IOCTL_AFD_CREATE, &create_params, sizeof(create_params), NULL, 0)))
     {
diff --git a/server/sock.c b/server/sock.c
index 3f19c77964..43a17d46ee 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -315,7 +315,7 @@ static inline int sock_error( struct fd *fd )
 
 static int sock_dispatch_asyncs( struct sock *sock, int event, int error )
 {
-    if ( sock->flags & WSA_FLAG_OVERLAPPED )
+    if (is_fd_overlapped( sock->fd ))
     {
         if (event & (POLLIN|POLLPRI) && async_waiting( &sock->read_q ))
         {
@@ -680,6 +680,7 @@ static struct sock *create_socket(void)
 
 static int init_socket( struct sock *sock, int family, int type, int protocol, unsigned int flags )
 {
+    unsigned int options = 0;
     int sockfd;
 
     sockfd = socket( family, type, protocol );
@@ -696,10 +697,13 @@ static int init_socket( struct sock *sock, int family, int type, int protocol, u
     sock->type   = type;
     sock->family = family;
 
-    if (sock->fd) release_object( sock->fd );
+    if (sock->fd)
+    {
+        options = get_fd_options( sock->fd );
+        release_object( sock->fd );
+    }
 
-    if (!(sock->fd = create_anonymous_fd( &sock_fd_ops, sockfd, &sock->obj,
-                            (flags & WSA_FLAG_OVERLAPPED) ? 0 : FILE_SYNCHRONOUS_IO_NONALERT )))
+    if (!(sock->fd = create_anonymous_fd( &sock_fd_ops, sockfd, &sock->obj, options )))
     {
         return -1;
     }




More information about the wine-cvs mailing list