server: Implement socket-specific ioctl() routine.
This commit is contained in:
parent
4659081cd9
commit
1239663fcb
|
@ -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
|
||||
|
|
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue