Work on ioctlsocket and WSAIoctl.

svn path=/trunk/; revision=7869
This commit is contained in:
Filip Navara 2004-01-25 08:32:44 +00:00
parent 3360515771
commit 5f474aea89
2 changed files with 59 additions and 38 deletions

View file

@ -463,6 +463,20 @@ accept(
}
/*
* @implemented
*/
INT
EXPORT
ioctlsocket(
IN SOCKET s,
IN LONG cmd,
IN OUT ULONG FAR* argp)
{
return WSAIoctl(s, cmd, argp, sizeof(ULONG), argp, sizeof(ULONG), argp, 0, 0);
}
/*
* @implemented
*/
@ -562,6 +576,51 @@ WSAConnect(
}
/*
* @implemented
*/
INT
EXPORT
WSAIoctl(
IN SOCKET s,
IN DWORD dwIoControlCode,
IN LPVOID lpvInBuffer,
IN DWORD cbInBuffer,
OUT LPVOID lpvOutBuffer,
IN DWORD cbOutBuffer,
OUT LPDWORD lpcbBytesReturned,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
PCATALOG_ENTRY Provider;
INT Status;
INT Errno;
if (!WSAINITIALIZED) {
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Status = Provider->ProcTable.lpWSPIoctl(
s, dwIoControlCode, lpvInBuffer, cbInBuffer, lpvOutBuffer,
cbOutBuffer, lpcbBytesReturned, lpOverlapped, lpCompletionRoutine,
NULL /* lpThreadId */, &Errno);
DereferenceProviderByPointer(Provider);
if (Status == SOCKET_ERROR) {
WSASetLastError(Errno);
}
return Status;
}
BOOL
STDCALL
DllMain(HANDLE hInstDll,

View file

@ -143,22 +143,6 @@ getsockopt(
}
/*
* @unimplemented
*/
INT
EXPORT
ioctlsocket(
IN SOCKET s,
IN LONG cmd,
IN OUT ULONG FAR* argp)
{
UNIMPLEMENTED
return 0;
}
/*
* @implemented
*/
@ -531,28 +515,6 @@ WSAHtons(
}
/*
* @unimplemented
*/
INT
EXPORT
WSAIoctl(
IN SOCKET s,
IN DWORD dwIoControlCode,
IN LPVOID lpvInBuffer,
IN DWORD cbInBuffer,
OUT LPVOID lpvOutBuffer,
IN DWORD cbOutBuffer,
OUT LPDWORD lpcbBytesReturned,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/