WSAIoctl (ws2_32)
Last changed: -77.124.220.248

.
Summary
TODO - a short description

C# Signature:

    /* Look at WSAIoctl function parameters .!. */
    /* http://msdn.microsoft.com/en-us/library/windows/desktop/ms741621(v=vs.85).aspx */
    [DllImport("Ws2_32.dll")]
    public static extern int WSAIoctl(
        /* Socket, Mode */
        IntPtr s, System.Net.Sockets.IOControlCode dwIoControlCode,
        /* Optional Or IntPtr.Zero, 0 */
        IntPtr lpvInBuffer, int cbInBuffer,
        /* Optional Or IntPtr.Zero, 0 */
        IntPtr lpvOutBuffer, int cbOutBuffer,
        /* reference to receive Size */
        ref int lpcbBytesReturned,
        /* IntPtr.Zero, IntPtr.Zero */
        IntPtr lpOverlapped, IntPtr lpCompletionRoutine);

VB Signature:

Declare Function WSAIoctl Lib "ws2_32.dll" (TODO) As TODO

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    public int Avilible
    {
        get
        {
        var BufferRet = 0;

        // v1
        //BufferRet = 0;
        //var BufferPtr = Marshal.AllocHGlobal(Buffer);
        //BufferRet = Native.recv(socketPtr, BufferPtr, Buffer, Native.MsgFlags.MSG_PEEK);
        //Marshal.FreeHGlobal(BufferPtr);

        // v2
        //BufferRet = 0;
        //Native.ioctlsocket(this.socketPtr, Native.Command.FIONREAD, ref BufferRet);

        // v3

        BufferRet = 0;
        var nBytesReturned = 0;
        var infoSize = Marshal.SizeOf(BufferRet);
        var handle = Marshal.AllocHGlobal(infoSize);
        Native.WSAIoctl(
            this.socketPtr, Native.ControlCode.FIONREAD,
            IntPtr.Zero, 0,
            handle, infoSize,
            ref nBytesReturned,
            IntPtr.Zero, IntPtr.Zero);
        BufferRet = Marshal.ReadInt32(handle);

        return BufferRet;
        }
    }

Documentation
WSAIoctl on MSDN