Erich E. Hoover : server: Implement socket-specific ioctl() routine.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 10 10:46:04 CST 2015


Module: wine
Branch: master
Commit: 1239663fcb82dee80c94bd5d121914126e58b2c5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1239663fcb82dee80c94bd5d121914126e58b2c5

Author: Erich E. Hoover <erich.e.hoover at wine-staging.com>
Date:   Thu Apr  3 09:21:51 2014 -0600

server: Implement socket-specific ioctl() routine.

---

 Makefile.in   |  3 ++-
 server/sock.c | 26 ++++++++++++++++++++++----
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 5c163b8..b600cf7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -52,7 +52,8 @@ __tooldeps__: libs/port libs/wine libs/wpp
 __builddeps__: __tooldeps__ include
 .PHONY: depend check test testclean crosstest __tooldeps__ __builddeps__
 
-loader server: libs/port libs/wine tools
+loader: libs/port libs/wine tools
+server: libs/port libs/wine tools include
 fonts: tools/sfnt2fon
 include: tools tools/widl
 libs/wine tools: libs/port
diff --git a/server/sock.c b/server/sock.c
index 7c0212e..6a75934 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -52,6 +52,8 @@
 #include "windef.h"
 #include "winternl.h"
 #include "winerror.h"
+#define USE_WS_PREFIX
+#include "winsock2.h"
 
 #include "process.h"
 #include "file.h"
@@ -86,9 +88,6 @@
 #define FD_WINE_RAW                0x80000000
 #define FD_WINE_INTERNAL           0xFFFF0000
 
-/* Constants for WSAIoctl() */
-#define WSA_FLAG_OVERLAPPED        0x01
-
 struct sock
 {
     struct object       obj;         /* object header */
@@ -121,6 +120,8 @@ static void sock_destroy( struct object *obj );
 static int sock_get_poll_events( struct fd *fd );
 static void sock_poll_event( struct fd *fd, int event );
 static enum server_fd_type sock_get_fd_type( struct fd *fd );
+static obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async,
+                                int blocking, const void *data, data_size_t size );
 static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count );
 static void sock_reselect_async( struct fd *fd, struct async_queue *queue );
 static void sock_cancel_async( struct fd *fd, struct process *process, struct thread *thread, client_ptr_t iosb );
@@ -155,7 +156,7 @@ static const struct fd_ops sock_fd_ops =
     sock_poll_event,              /* poll_event */
     no_flush,                     /* flush */
     sock_get_fd_type,             /* get_fd_type */
-    default_fd_ioctl,             /* ioctl */
+    sock_ioctl,                   /* ioctl */
     sock_queue_async,             /* queue_async */
     sock_reselect_async,          /* reselect_async */
     sock_cancel_async             /* cancel_async */
@@ -523,6 +524,23 @@ static enum server_fd_type sock_get_fd_type( struct fd *fd )
     return FD_TYPE_SOCKET;
 }
 
+obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data,
+                         int blocking, const void *data, data_size_t size )
+{
+    struct sock *sock = get_fd_user( fd );
+
+    assert( sock->obj.ops == &sock_ops );
+
+    switch(code)
+    {
+    case WS_SIO_ADDRESS_LIST_CHANGE:
+        /* intentional fallthrough, not yet supported */
+    default:
+        set_error( STATUS_NOT_SUPPORTED );
+        return 0;
+    }
+}
+
 static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count )
 {
     struct sock *sock = get_fd_user( fd );




More information about the wine-cvs mailing list