Index: dll/win32/mswsock/extensions.c =================================================================== --- dll/win32/mswsock/extensions.c (revision 74695) +++ dll/win32/mswsock/extensions.c (working copy) @@ -12,6 +12,9 @@ #include #include +LPFN_TRANSMITFILE pfnTransmitFile = NULL; +LPFN_GETACCEPTEXSOCKADDRS pfnGetAcceptExSockaddrs = NULL; +LPFN_ACCEPTEX pfnAcceptEx = NULL; /* * @implemented */ @@ -25,30 +28,111 @@ LPTRANSMIT_FILE_BUFFERS TransmitBuffers, DWORD Flags) { - static GUID TransmitFileGUID = WSAID_TRANSMITFILE; - LPFN_TRANSMITFILE pfnTransmitFile; - DWORD cbBytesReturned; + GUID TransmitFileGUID = WSAID_TRANSMITFILE; + DWORD cbBytesReturned; - if (WSAIoctl(Socket, - SIO_GET_EXTENSION_FUNCTION_POINTER, - &TransmitFileGUID, - sizeof(TransmitFileGUID), - &pfnTransmitFile, - sizeof(pfnTransmitFile), - &cbBytesReturned, - NULL, - NULL) == SOCKET_ERROR) - { - return FALSE; - } + if (WSAIoctl(Socket, + SIO_GET_EXTENSION_FUNCTION_POINTER, + &TransmitFileGUID, + sizeof(TransmitFileGUID), + &pfnTransmitFile, + sizeof(pfnTransmitFile), + &cbBytesReturned, + NULL, + NULL) == SOCKET_ERROR) + { + return FALSE; + } - return pfnTransmitFile(Socket, - File, - NumberOfBytesToWrite, - NumberOfBytesPerSend, - Overlapped, - TransmitBuffers, - Flags); + return pfnTransmitFile(Socket, + File, + NumberOfBytesToWrite, + NumberOfBytesPerSend, + Overlapped, + TransmitBuffers, + Flags); } +/* +* @implemented +*/ +BOOL +WINAPI +AcceptEx(SOCKET ListenSocket, + SOCKET AcceptSocket, + PVOID OutputBuffer, + DWORD ReceiveDataLength, + DWORD LocalAddressLength, + DWORD RemoteAddressLength, + LPDWORD BytesReceived, + LPOVERLAPPED Overlapped) +{ + GUID AcceptExGUID = WSAID_ACCEPTEX; + GUID GetAcceptExSockaddrsGUID = WSAID_GETACCEPTEXSOCKADDRS; + DWORD cbBytesReturned; + + if (WSAIoctl(ListenSocket, + SIO_GET_EXTENSION_FUNCTION_POINTER, + &AcceptExGUID, + sizeof(AcceptExGUID), + &pfnAcceptEx, + sizeof(pfnAcceptEx), + &cbBytesReturned, + NULL, + NULL) == SOCKET_ERROR) + { + return FALSE; + } + + if (WSAIoctl(ListenSocket, + SIO_GET_EXTENSION_FUNCTION_POINTER, + &GetAcceptExSockaddrsGUID, + sizeof(GetAcceptExSockaddrsGUID), + &pfnGetAcceptExSockaddrs, + sizeof(pfnGetAcceptExSockaddrs), + &cbBytesReturned, + NULL, + NULL) == SOCKET_ERROR) + { + pfnAcceptEx = NULL; + return FALSE; + } + + return pfnAcceptEx(ListenSocket, + AcceptSocket, + OutputBuffer, + ReceiveDataLength, + LocalAddressLength, + RemoteAddressLength, + BytesReceived, + Overlapped); +} + + +/* +* @implemented +*/ +VOID +WINAPI +GetAcceptExSockaddrs(PVOID OutputBuffer, + DWORD ReceiveDataLength, + DWORD LocalAddressLength, + DWORD RemoteAddressLength, + LPSOCKADDR* LocalSockaddr, + LPINT LocalSockaddrLength, + LPSOCKADDR* RemoteSockaddr, + LPINT RemoteSockaddrLength) +{ + if (pfnGetAcceptExSockaddrs) + { + pfnGetAcceptExSockaddrs(OutputBuffer, + ReceiveDataLength, + LocalAddressLength, + RemoteAddressLength, + LocalSockaddr, + LocalSockaddrLength, + RemoteSockaddr, + RemoteSockaddrLength); + } +} /* EOF */ Index: dll/win32/mswsock/stubs.c =================================================================== --- dll/win32/mswsock/stubs.c (revision 74695) +++ dll/win32/mswsock/stubs.c (working copy) @@ -21,26 +21,7 @@ DWORD dwPriority; } NS_ROUTINE, *PNS_ROUTINE, * FAR LPNS_ROUTINE; -/* - * @unimplemented - */ -BOOL -WINAPI -AcceptEx(SOCKET ListenSocket, - SOCKET AcceptSocket, - PVOID OutputBuffer, - DWORD ReceiveDataLength, - DWORD LocalAddressLength, - DWORD RemoteAddressLength, - LPDWORD BytesReceived, - LPOVERLAPPED Overlapped) -{ - OutputDebugStringW(L"w32sock AcceptEx stub called\n"); - return FALSE; -} - - /* * @unimplemented */ @@ -74,24 +55,6 @@ /* * @unimplemented */ -VOID -WINAPI -GetAcceptExSockaddrs(PVOID OutputBuffer, - DWORD ReceiveDataLength, - DWORD LocalAddressLength, - DWORD RemoteAddressLength, - LPSOCKADDR* LocalSockaddr, - LPINT LocalSockaddrLength, - LPSOCKADDR* RemoteSockaddr, - LPINT RemoteSockaddrLength) -{ - OutputDebugStringW(L"w32sock GetAcceptExSockaddrs stub called\n"); -} - - -/* - * @unimplemented - */ INT WINAPI GetAddressByNameA(DWORD NameSpace,