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