当前位置: 首页>>代码示例>>C#>>正文


C# SocketAsyncOperation类代码示例

本文整理汇总了C#中SocketAsyncOperation的典型用法代码示例。如果您正苦于以下问题:C# SocketAsyncOperation类的具体用法?C# SocketAsyncOperation怎么用?C# SocketAsyncOperation使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


SocketAsyncOperation类属于命名空间,在下文中一共展示了SocketAsyncOperation类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: NotLoggedFile

 public static void NotLoggedFile(string filePath, Socket socket, SocketAsyncOperation completedOperation)
 {
     if (IsEnabled)
     {
         Log.NotLoggedFile(filePath, GetHashCode(socket), completedOperation);
     }
 }
开发者ID:dotnet,项目名称:corefx,代码行数:7,代码来源:NetEventSource.Sockets.cs

示例2: CreateTaskFromCompletionHandler

        private static Task CreateTaskFromCompletionHandler(SocketAsyncEventArgs socketAsyncEventArgs, SocketAsyncOperation socketAsyncOperation)
        {
            TaskCompletionSource<string> completionSource = new TaskCompletionSource<string>();
            socketAsyncEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>((o, eventArgs) =>
            {
                if (eventArgs.LastOperation == socketAsyncOperation)
                {
                    if (eventArgs.SocketError == SocketError.Success)
                    {
                        completionSource.SetResult("");
                    }
                    else
                    {
                        completionSource.SetException(new SocketException((int)eventArgs.SocketError));
                    }
                }
            });

            return completionSource.Task;
        }
开发者ID:iDay,项目名称:sockets-for-cordova,代码行数:20,代码来源:SocketExtensions.cs

示例3: TryUnsafeSocketOperation

        private bool TryUnsafeSocketOperation(Socket socket, SocketAsyncOperation operation, SocketAsyncEventArgs socketAsyncEventArgs)
        {
            try
            {
                bool result = false;
                switch (operation)
                {
                    case SocketAsyncOperation.Accept:
                        result = socket.AcceptAsync(socketAsyncEventArgs);
                        break;
                    case SocketAsyncOperation.Send:
                        result = socket.SendAsync(socketAsyncEventArgs);
                        break;
                    case SocketAsyncOperation.Receive:
                        result = socket.ReceiveAsync(socketAsyncEventArgs);
                        break;
                    default:
                        throw new InvalidOperationException("Unknown case called, should program something for this");
                }

                if (!result)
                {
                    OperationCallback(socket, socketAsyncEventArgs);
                }
            }
            catch (SocketException ex)
            {
                if (operation != SocketAsyncOperation.Accept)
                {
                    HandleCommunicationError(socket, ex);
                }
                return false;
            }
            catch (ObjectDisposedException)
            {
                // If disposed, handle communication error was already done and we're just catching up on other threads. suppress it.
                return false;
            }

            return true;
        }
开发者ID:tablesmit,项目名称:simplsockets,代码行数:41,代码来源:SimplSocketServer.cs

示例4: StartOperationSendPackets

        internal void StartOperationSendPackets() {
            // Remember the operation type.
            m_CompletedOperation = SocketAsyncOperation.SendPackets;

            // Prevent mutithreaded manipulation of the list.
            if (m_SendPacketsElements != null) {
                m_SendPacketsElementsInternal = (SendPacketsElement[])m_SendPacketsElements.Clone();
            }

            // TransmitPackets uses an array of TRANSMIT_PACKET_ELEMENT structs as
            // descriptors for buffers and files to be sent.  It also takes a send size
            // and some flags.  The TRANSMIT_PACKET_ELEMENT for a file contains a native file handle.
            // This function basically opens the files to get the file handles, pins down any buffers
            // specified and builds the native TRANSMIT_PACKET_ELEMENT array that will be passed
            // to TransmitPackets.
            
            // Scan the elements to count files and buffers
            m_SendPacketsElementsFileCount = 0;
            m_SendPacketsElementsBufferCount = 0;
            foreach (SendPacketsElement spe in m_SendPacketsElementsInternal) {
                if(spe != null) {
                    if(spe.m_FilePath != null) {
                        m_SendPacketsElementsFileCount++;
                    }
                    if(spe.m_Buffer != null && spe.m_Count > 0) {
                        m_SendPacketsElementsBufferCount++;
                    }
                }
            }

            // Attempt to open the files if any
            if(m_SendPacketsElementsFileCount > 0) {

                // Create arrays for streams and handles
                m_SendPacketsFileStreams = new FileStream[m_SendPacketsElementsFileCount];
                m_SendPacketsFileHandles = new SafeHandle[m_SendPacketsElementsFileCount];

                // Loop through the elements attempting to open each files and get its handle
                int index = 0;
                foreach(SendPacketsElement spe in m_SendPacketsElementsInternal) {
                    if(spe != null && spe.m_FilePath != null) {
                        Exception fileStreamException = null;
                        try {
                            // Create a FileStream to open the file
                            m_SendPacketsFileStreams[index] = 
                                new FileStream(spe.m_FilePath,FileMode.Open,FileAccess.Read,FileShare.Read);
                        }
                        catch (Exception ex) {
                            // Save the exception to throw after closing any previous successful file opens
                            fileStreamException = ex;                            
                        }
                        if (fileStreamException != null) {
                            // Got exception opening a file - do some cleanup then throw
                            for(int i = 0; i < m_SendPacketsElementsFileCount; i++) {
                                // Dereference handles
                                m_SendPacketsFileHandles[i] = null;
                                // Close any open streams
                                if(m_SendPacketsFileStreams[i] != null) {
                                    m_SendPacketsFileStreams[i].Close();
                                    m_SendPacketsFileStreams[i] = null;
                                }
                            }
                            throw fileStreamException;
                        }
                        // Get the file handle from the stream
                        ExceptionHelper.UnmanagedPermission.Assert();
                        try {
                            m_SendPacketsFileHandles[index] = m_SendPacketsFileStreams[index].SafeFileHandle;
                        }
                        finally {
                            SecurityPermission.RevertAssert();
                        }
                        index++;
                    }
                }
            }

            CheckPinSendPackets();
        }
开发者ID:REALTOBIZ,项目名称:mono,代码行数:79,代码来源:Socket.cs

示例5: StartOperationReceiveMessageFrom

        internal void StartOperationReceiveMessageFrom() {
            // Remember the operation type.
            m_CompletedOperation = SocketAsyncOperation.ReceiveMessageFrom;

            // WSARecvMsg uses a WSAMsg descriptor.
            // The WSAMsg buffer is pinned with a GCHandle to avoid complicating the use of Overlapped.
            // WSAMsg contains a pointer to a sockaddr.  
            // The sockaddr is pinned with a GCHandle to avoid complicating the use of Overlapped.
            // WSAMsg contains a pointer to a WSABuffer array describing data buffers.
            // WSAMsg also contains a single WSABuffer describing a control buffer.
            // 
            PinSocketAddressBuffer();
            
            // Create and pin a WSAMessageBuffer if none already.
            if(m_WSAMessageBuffer == null) {
                m_WSAMessageBuffer = new byte[s_WSAMsgSize];
                m_WSAMessageBufferGCHandle = GCHandle.Alloc(m_WSAMessageBuffer, GCHandleType.Pinned);
                m_PtrWSAMessageBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(m_WSAMessageBuffer, 0);
            }

            // Create and pin an appropriately sized control buffer if none already
            IPAddress ipAddress = (m_SocketAddress.Family == AddressFamily.InterNetworkV6
                ? m_SocketAddress.GetIPAddress() : null);
            bool ipv4 = (m_CurrentSocket.AddressFamily == AddressFamily.InterNetwork
                || (ipAddress != null && ipAddress.IsIPv4MappedToIPv6)); // DualMode
            bool ipv6 = m_CurrentSocket.AddressFamily == AddressFamily.InterNetworkV6;

            if(ipv4 && (m_ControlBuffer == null || m_ControlBuffer.Length != s_ControlDataSize)) {
                if(m_ControlBufferGCHandle.IsAllocated) {
                    m_ControlBufferGCHandle.Free();
                }
                m_ControlBuffer = new byte[s_ControlDataSize];
            } else if(ipv6 && (m_ControlBuffer == null || m_ControlBuffer.Length != s_ControlDataIPv6Size)) {
                if(m_ControlBufferGCHandle.IsAllocated) {
                    m_ControlBufferGCHandle.Free();
                }
                m_ControlBuffer = new byte[s_ControlDataIPv6Size];
            }
            if(!m_ControlBufferGCHandle.IsAllocated) {
                m_ControlBufferGCHandle = GCHandle.Alloc(m_ControlBuffer, GCHandleType.Pinned);
                m_PtrControlBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(m_ControlBuffer, 0);
            }

            // If single buffer we need a pinned 1 element WSABuffer.
            if(m_Buffer != null) {
                if(m_WSARecvMsgWSABufferArray == null) {
                    m_WSARecvMsgWSABufferArray = new WSABuffer[1];
                }
                m_WSARecvMsgWSABufferArray[0].Pointer = m_PtrSingleBuffer;
                m_WSARecvMsgWSABufferArray[0].Length = m_Count;
                m_WSARecvMsgWSABufferArrayGCHandle = GCHandle.Alloc(m_WSARecvMsgWSABufferArray, GCHandleType.Pinned);
                m_PtrWSARecvMsgWSABufferArray = Marshal.UnsafeAddrOfPinnedArrayElement(m_WSARecvMsgWSABufferArray, 0);
            } else {
                // just pin the multi-buffer WSABuffer
                m_WSARecvMsgWSABufferArrayGCHandle = GCHandle.Alloc(m_WSABufferArray, GCHandleType.Pinned);
                m_PtrWSARecvMsgWSABufferArray = Marshal.UnsafeAddrOfPinnedArrayElement(m_WSABufferArray, 0);
            }

            // Fill in WSAMessageBuffer
            unsafe {
                UnsafeNclNativeMethods.OSSOCK.WSAMsg* pMessage = (UnsafeNclNativeMethods.OSSOCK.WSAMsg*)m_PtrWSAMessageBuffer;;
                pMessage->socketAddress = m_PtrSocketAddressBuffer;
                pMessage->addressLength = (uint)m_SocketAddress.Size;
                pMessage->buffers = m_PtrWSARecvMsgWSABufferArray;
                if(m_Buffer != null) {
                    pMessage->count = (uint)1;
                } else {
                    pMessage->count = (uint)m_WSABufferArray.Length;
                }
                if(m_ControlBuffer != null) {
                    pMessage->controlBuffer.Pointer = m_PtrControlBuffer;
                    pMessage->controlBuffer.Length = m_ControlBuffer.Length;
                }
                pMessage->flags = m_SocketFlags;
            }
        }
开发者ID:REALTOBIZ,项目名称:mono,代码行数:76,代码来源:Socket.cs

示例6: StartOperationWrapperConnect

 internal void StartOperationWrapperConnect(MultipleConnectAsync args) {
     m_CompletedOperation = SocketAsyncOperation.Connect;
     m_MultipleConnect = args;
     m_ConnectSocket = null;
 }
开发者ID:REALTOBIZ,项目名称:mono,代码行数:5,代码来源:Socket.cs

示例7: StartOperationAccept

        internal void StartOperationAccept() {
            // Remember the operation type.
            m_CompletedOperation = SocketAsyncOperation.Accept;

            // AcceptEx needs a single buffer with room for two special sockaddr data structures.
            // It can also take additional buffer space in front of those special sockaddr 
            // structures that can be filled in with initial data coming in on a connection.
            
            // First calculate the special AcceptEx address buffer size.
            // It is the size of two native sockaddr buffers with 16 extra bytes each.
            // The native sockaddr buffers vary by address family so must reference the current socket.
            m_AcceptAddressBufferCount = 2 * (m_CurrentSocket.m_RightEndPoint.Serialize().Size + 16);
            
            // If our caller specified a buffer (willing to get received data with the Accept) then
            // it needs to be large enough for the two special sockaddr buffers that AcceptEx requires.
            // Throw if that buffer is not large enough.  
            if(m_Buffer != null) {
            
                // Caller specified a buffer - see if it is large enough
                if(m_Count < m_AcceptAddressBufferCount) {
                    throw new ArgumentException(SR.GetString(SR.net_buffercounttoosmall, "Count"));
                }
                // Buffer is already pinned.
            
            } else {
            
                // Caller didn't specify a buffer so use an internal one.
                // See if current internal one is big enough, otherwise create a new one.
                if(m_AcceptBuffer == null || m_AcceptBuffer.Length < m_AcceptAddressBufferCount) {
                    m_AcceptBuffer = new byte[m_AcceptAddressBufferCount];
                }
                CheckPinSingleBuffer(false);
            }
        }
开发者ID:REALTOBIZ,项目名称:mono,代码行数:34,代码来源:Socket.cs

示例8: StartOperationReceiveMessageFrom

 internal unsafe void StartOperationReceiveMessageFrom()
 {
     this.m_CompletedOperation = SocketAsyncOperation.ReceiveMessageFrom;
     this.PinSocketAddressBuffer();
     if (this.m_WSAMessageBuffer == null)
     {
         this.m_WSAMessageBuffer = new byte[s_WSAMsgSize];
         this.m_WSAMessageBufferGCHandle = GCHandle.Alloc(this.m_WSAMessageBuffer, GCHandleType.Pinned);
         this.m_PtrWSAMessageBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(this.m_WSAMessageBuffer, 0);
     }
     bool flag = this.m_CurrentSocket.AddressFamily == AddressFamily.InterNetwork;
     bool flag2 = this.m_CurrentSocket.AddressFamily == AddressFamily.InterNetworkV6;
     if (flag && ((this.m_ControlBuffer == null) || (this.m_ControlBuffer.Length != s_ControlDataSize)))
     {
         if (this.m_ControlBufferGCHandle.IsAllocated)
         {
             this.m_ControlBufferGCHandle.Free();
         }
         this.m_ControlBuffer = new byte[s_ControlDataSize];
     }
     else if (flag2 && ((this.m_ControlBuffer == null) || (this.m_ControlBuffer.Length != s_ControlDataIPv6Size)))
     {
         if (this.m_ControlBufferGCHandle.IsAllocated)
         {
             this.m_ControlBufferGCHandle.Free();
         }
         this.m_ControlBuffer = new byte[s_ControlDataIPv6Size];
     }
     if (!this.m_ControlBufferGCHandle.IsAllocated)
     {
         this.m_ControlBufferGCHandle = GCHandle.Alloc(this.m_ControlBuffer, GCHandleType.Pinned);
         this.m_PtrControlBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(this.m_ControlBuffer, 0);
     }
     if (this.m_Buffer != null)
     {
         if (this.m_WSARecvMsgWSABufferArray == null)
         {
             this.m_WSARecvMsgWSABufferArray = new WSABuffer[1];
         }
         this.m_WSARecvMsgWSABufferArray[0].Pointer = this.m_PtrSingleBuffer;
         this.m_WSARecvMsgWSABufferArray[0].Length = this.m_Count;
         this.m_WSARecvMsgWSABufferArrayGCHandle = GCHandle.Alloc(this.m_WSARecvMsgWSABufferArray, GCHandleType.Pinned);
         this.m_PtrWSARecvMsgWSABufferArray = Marshal.UnsafeAddrOfPinnedArrayElement(this.m_WSARecvMsgWSABufferArray, 0);
     }
     else
     {
         this.m_WSARecvMsgWSABufferArrayGCHandle = GCHandle.Alloc(this.m_WSABufferArray, GCHandleType.Pinned);
         this.m_PtrWSARecvMsgWSABufferArray = Marshal.UnsafeAddrOfPinnedArrayElement(this.m_WSABufferArray, 0);
     }
     UnsafeNclNativeMethods.OSSOCK.WSAMsg* ptrWSAMessageBuffer = (UnsafeNclNativeMethods.OSSOCK.WSAMsg*) this.m_PtrWSAMessageBuffer;
     ptrWSAMessageBuffer->socketAddress = this.m_PtrSocketAddressBuffer;
     ptrWSAMessageBuffer->addressLength = (uint) this.m_SocketAddress.Size;
     ptrWSAMessageBuffer->buffers = this.m_PtrWSARecvMsgWSABufferArray;
     if (this.m_Buffer != null)
     {
         ptrWSAMessageBuffer->count = 1;
     }
     else
     {
         ptrWSAMessageBuffer->count = (uint) this.m_WSABufferArray.Length;
     }
     if (this.m_ControlBuffer != null)
     {
         ptrWSAMessageBuffer->controlBuffer.Pointer = this.m_PtrControlBuffer;
         ptrWSAMessageBuffer->controlBuffer.Length = this.m_ControlBuffer.Length;
     }
     ptrWSAMessageBuffer->flags = this.m_SocketFlags;
 }
开发者ID:pritesh-mandowara-sp,项目名称:DecompliedDotNetLibraries,代码行数:68,代码来源:SocketAsyncEventArgs.cs

示例9: StartOperationReceiveMessageFrom

 internal void StartOperationReceiveMessageFrom()
 {
     // Remember the operation type.
     _completedOperation = SocketAsyncOperation.ReceiveMessageFrom;
     InnerStartOperationReceiveMessageFrom();
 }
开发者ID:dotnet,项目名称:corefx,代码行数:6,代码来源:SocketAsyncEventArgs.cs

示例10: StartOperationDisconnect

 internal void StartOperationDisconnect()
 {
     // Remember the operation type.
     _completedOperation = SocketAsyncOperation.Disconnect;
     InnerStartOperationDisconnect();
 }
开发者ID:dotnet,项目名称:corefx,代码行数:6,代码来源:SocketAsyncEventArgs.cs

示例11: StartOperationConnect

        internal void StartOperationConnect()
        {
            // Remember the operation type.
            _completedOperation = SocketAsyncOperation.Connect;
            _multipleConnect = null;
            _connectSocket = null;

            InnerStartOperationConnect();
        }
开发者ID:dotnet,项目名称:corefx,代码行数:9,代码来源:SocketAsyncEventArgs.cs

示例12: Register

 public void Register(IActorRef connection, SocketAsyncOperation? initialOps)
 {
     _connection = connection;
 }
开发者ID:Micha-kun,项目名称:akka.net,代码行数:4,代码来源:SocketChannel.cs

示例13: DoOperation

		internal void DoOperation (SocketAsyncOperation operation, Socket socket)
		{
			ThreadStart callback = null;
			curSocket = socket;
			
			switch (operation) {
				case SocketAsyncOperation.Connect:
#if MOONLIGHT
					socket.seed_endpoint = RemoteEndPoint;
#endif
					callback = new ThreadStart (ConnectCallback);
					SocketError = SocketError.Success;
					LastOperation = operation;
					break;

				default:
					throw new NotSupportedException ();
			}

			Thread t = new Thread (callback);
			t.IsBackground = true;
			t.Start ();
		}
开发者ID:calumjiao,项目名称:Mono-Class-Libraries,代码行数:23,代码来源:SocketAsyncEventArgs.cs

示例14: SetLastOperation

		internal void SetLastOperation (SocketAsyncOperation op)
		{
			LastOperation = op;
		}
开发者ID:calumjiao,项目名称:Mono-Class-Libraries,代码行数:4,代码来源:SocketAsyncEventArgs.cs

示例15: ValidateCompletedEvent

		private bool ValidateCompletedEvent(SocketAsyncEventArgs e, SocketAsyncOperation expected)
		{
			if (_error != null) return false;

			if (e.SocketError != SocketError.Success)
			{
				SetError(e.SocketError);
				return false;
			}

			if (e.LastOperation != expected)
			{
				SetError(new InvalidOperationException(string.Format(
					"Excepted last operation {0} but last operation was {1}.",
					expected,
					e.LastOperation)));
				return false;
			}

			return true;
		}
开发者ID:edwardt,项目名称:MySpace-Data-Relay,代码行数:21,代码来源:SocketChannel.cs


注:本文中的SocketAsyncOperation类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。