diff --git a/include/wine/afd.h b/include/wine/afd.h index ae5a0584bdc..99df0b8d65e 100644 --- a/include/wine/afd.h +++ b/include/wine/afd.h @@ -169,6 +169,7 @@ struct afd_get_events_params #define IOCTL_AFD_WINE_SET_SO_LINGER CTL_CODE(FILE_DEVICE_NETWORK, 226, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_AFD_WINE_GET_SO_OOBINLINE CTL_CODE(FILE_DEVICE_NETWORK, 227, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_AFD_WINE_SET_SO_OOBINLINE CTL_CODE(FILE_DEVICE_NETWORK, 228, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_AFD_WINE_SET_SO_RCVBUF CTL_CODE(FILE_DEVICE_NETWORK, 229, METHOD_BUFFERED, FILE_ANY_ACCESS) struct afd_create_params { diff --git a/server/sock.c b/server/sock.c index e7754dc0da3..aaac693d098 100644 --- a/server/sock.c +++ b/server/sock.c @@ -2580,6 +2580,22 @@ static int sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ) return 1; } + case IOCTL_AFD_WINE_SET_SO_RCVBUF: + { + DWORD rcvbuf; + + if (get_req_data_size() < sizeof(rcvbuf)) + { + set_error( STATUS_BUFFER_TOO_SMALL ); + return 0; + } + rcvbuf = *(DWORD *)get_req_data(); + + if (setsockopt( unix_fd, SOL_SOCKET, SO_RCVBUF, (char *)&rcvbuf, sizeof(rcvbuf) ) < 0) + set_error( sock_get_ntstatus( errno ) ); + return 0; + } + default: set_error( STATUS_NOT_SUPPORTED ); return 0;