Marcus Meissner : ws2_32: Implemented FIONBIO and FIONREAD in
WSAIoctl.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Oct 3 05:18:39 CDT 2006
Module: wine
Branch: master
Commit: 971d5f3f89b2113f4b1b4e05e3c2312860c13fe3
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=971d5f3f89b2113f4b1b4e05e3c2312860c13fe3
Author: Marcus Meissner <marcus at jet.franken.de>
Date: Mon Oct 2 14:08:25 2006 +0200
ws2_32: Implemented FIONBIO and FIONREAD in WSAIoctl.
---
dlls/ws2_32/socket.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index c752b39..37a1de7 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2102,8 +2102,6 @@ char* WINAPI WS_inet_ntoa(struct WS_in_a
/**********************************************************************
* WSAIoctl (WS2_32.50)
*
- *
- * FIXME: Only SIO_GET_INTERFACE_LIST option implemented.
*/
INT WINAPI WSAIoctl(SOCKET s,
DWORD dwIoControlCode,
@@ -2116,6 +2114,7 @@ INT WINAPI WSAIoctl(SOCKET s,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
int fd = get_sock_fd( s, 0, NULL );
+ INT ret;
if (fd == -1) return SOCKET_ERROR;
@@ -2125,6 +2124,32 @@ INT WINAPI WSAIoctl(SOCKET s,
switch( dwIoControlCode )
{
+ case WS_FIONBIO:
+ if (cbInBuffer != sizeof(u_long)) {
+ release_sock_fd( s, fd );
+ WSASetLastError(WSAEFAULT);
+ return SOCKET_ERROR;
+ }
+ ret = WS_ioctlsocket( s, WS_FIONBIO, lpvInBuffer);
+ if (ret == SOCKET_ERROR) {
+ release_sock_fd( s, fd );
+ /* last error already set by WS_ioctlsocket */
+ return ret;
+ }
+ break;
+ case WS_FIONREAD:
+ if (cbOutBuffer != sizeof(u_long)) {
+ release_sock_fd( s, fd );
+ WSASetLastError(WSAEFAULT);
+ return SOCKET_ERROR;
+ }
+ ret = WS_ioctlsocket( s, WS_FIONREAD, lpbOutBuffer);
+ if (ret == SOCKET_ERROR) {
+ release_sock_fd( s, fd );
+ /* last error already set by WS_ioctlsocket */
+ return ret;
+ }
+ break;
case SIO_GET_INTERFACE_LIST:
{
INTERFACE_INFO* intArray = (INTERFACE_INFO*)lpbOutBuffer;
@@ -2257,6 +2282,10 @@ #endif
* with WSA_FLAG_OVERLAPPED, but there is no easy way to get this */
break;
+ case SIO_FLUSH:
+ FIXME("SIO_FLUSH: stub.\n");
+ break;
+
default:
FIXME("unsupported WS_IOCTL cmd (%08lx)\n", dwIoControlCode);
release_sock_fd( s, fd );
More information about the wine-cvs
mailing list