Exemplo n.º 1
0
        internal SocketError WSARecvMsg(SafeCloseSocket socketHandle, IntPtr msg, out int bytesTransferred, SafeHandle overlapped, IntPtr completionRoutine)
        {
            EnsureDynamicWinsockMethods();
            WSARecvMsgDelegate recvMsg = _dynamicWinsockMethods.GetDelegate <WSARecvMsgDelegate>(socketHandle);

            return(recvMsg(socketHandle, msg, out bytesTransferred, overlapped, completionRoutine));
        }
 private void EnsureWSARecvMsg(SafeCloseSocket socketHandle)
 {
     if (_recvMsg == null)
     {
         lock (_lockObject)
         {
             if (_recvMsg == null)
             {
                 Guid   guid          = new Guid("{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}");
                 IntPtr ptrWSARecvMsg = LoadDynamicFunctionPointer(socketHandle, ref guid);
                 _recvMsg         = Marshal.GetDelegateForFunctionPointer <WSARecvMsgDelegate>(ptrWSARecvMsg);
                 _recvMsgBlocking = Marshal.GetDelegateForFunctionPointer <WSARecvMsgDelegateBlocking>(ptrWSARecvMsg);
             }
         }
     }
 }
Exemplo n.º 3
0
 private void EnsureWSARecvMsg(SafeCloseSocket socketHandle)
 {
     if (this.recvMsg == null)
     {
         lock (this.lockObject)
         {
             if (this.recvMsg == null)
             {
                 Guid   guid = new Guid("{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}");
                 IntPtr ptr  = this.LoadDynamicFunctionPointer(socketHandle, ref guid);
                 this.recvMsg          = (WSARecvMsgDelegate)Marshal.GetDelegateForFunctionPointer(ptr, typeof(WSARecvMsgDelegate));
                 this.recvMsg_Blocking = (WSARecvMsgDelegate_Blocking)Marshal.GetDelegateForFunctionPointer(ptr, typeof(WSARecvMsgDelegate_Blocking));
             }
         }
     }
 }
Exemplo n.º 4
0
        private void LoadWSARecvMsg()
        {
            SocketError errorCode;
            IntPtr ptrWSARecvMsg = IntPtr.Zero;

            unsafe
            {
                int length;
                Guid guid = new Guid("{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}");

                // This can throw ObjectDisposedException.
                errorCode = UnsafeNclNativeMethods.OSSOCK.WSAIoctl(
                    m_Handle,
                    IoctlSocketConstants.SIOGETEXTENSIONFUNCTIONPOINTER,
                    ref guid,
                    sizeof(Guid),
                    out ptrWSARecvMsg,
                    sizeof(IntPtr),
                    out length,
                    IntPtr.Zero,
                    IntPtr.Zero);
            }

            if (errorCode != SocketError.Success)
            {
                throw new SocketException();
            }
            s_WSARecvMsg = (WSARecvMsgDelegate) Marshal.GetDelegateForFunctionPointer(ptrWSARecvMsg, typeof(WSARecvMsgDelegate));
            s_WSARecvMsg_Blocking = (WSARecvMsgDelegate_Blocking) Marshal.GetDelegateForFunctionPointer(ptrWSARecvMsg, typeof(WSARecvMsgDelegate_Blocking));
        }