- Fix calculation of required buffer size.

- Add support for detecting the IFF_MULTICAST flag.
- Stub for SIO_ADDRESS_LIST_CHANGE.
This commit is contained in:
Robert Shearman 2004-10-04 20:37:43 +00:00 committed by Alexandre Julliard
parent 179dc259e4
commit cf78e15c2b
2 changed files with 15 additions and 1 deletions

View File

@ -1812,6 +1812,10 @@ INT WINAPI WSAIoctl (SOCKET s,
if (fd == -1) return SOCKET_ERROR;
TRACE("%d, 0x%08lx, %p, %ld, %p, %ld, %p, %p, %p\n",
s, dwIoControlCode, lpvInBuffer, cbInBuffer, lpbOutBuffer,
cbOutBuffer, lpcbBytesReturned, lpOverlapped, lpCompletionRoutine);
switch( dwIoControlCode )
{
case SIO_GET_INTERFACE_LIST:
@ -1849,8 +1853,9 @@ INT WINAPI WSAIoctl (SOCKET s,
{
PIP_ADAPTER_INFO ptr;
if (size > cbOutBuffer)
if (size*sizeof(INTERFACE_INFO)/sizeof(IP_ADAPTER_INFO) > cbOutBuffer)
{
WARN("Buffer too small = %lu, cbOutBuffer = %lu\n", size, cbOutBuffer);
HeapFree(GetProcessHeap(),0,table);
release_sock_fd( s, fd );
WSASetLastError(WSAEFAULT);
@ -1889,6 +1894,8 @@ INT WINAPI WSAIoctl (SOCKET s,
intArray->iiFlags |= WS_IFF_LOOPBACK;
if (ifInfo.ifr_flags & IFF_UP)
intArray->iiFlags |= WS_IFF_UP;
if (ifInfo.ifr_flags & IFF_MULTICAST)
intArray->iiFlags |= WS_IFF_MULTICAST;
}
addr = inet_addr(ptr->IpAddressList.IpAddress.String);
@ -1938,6 +1945,12 @@ INT WINAPI WSAIoctl (SOCKET s,
break;
}
case SIO_ADDRESS_LIST_CHANGE:
FIXME("-> SIO_ADDRESS_LIST_CHANGE request: stub\n");
/* FIXME: error and return code depend on whether socket was created
* with WSA_FLAG_OVERLAPPED, but there is no easy way to get this */
break;
default:
WARN("\tunsupported WS_IOCTL cmd (%08lx)\n", dwIoControlCode);
release_sock_fd( s, fd );

View File

@ -117,6 +117,7 @@ extern "C" {
#define IOC_WS2 0x08000000
#define IOC_PROTOCOL 0x10000000
#define IOC_VENDOR 0x18000000
#define IOC_VOID 0x20000000
#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
#define _WSAIOW(x,y) (IOC_IN|(x)|(y))