示例#1
0
 //TODO: Fix alloction per socket accept and remo task.
 public static async Task<Socket> AcceptSocketAsync(this Socket listenSocket, SocketAwaitableEventArgs awaitable)
 {
     await AcceptAsync(listenSocket, awaitable);
     var acceptSocket = awaitable.AcceptSocket;
     awaitable.AcceptSocket = null;
     return acceptSocket;
 }
示例#2
0
        public static async Task<IDisposableConnection<ArraySegment<byte>>> CreateConnection(
            EndPoint endpoint,
            SocketType socketType = SocketType.Stream,
            ProtocolType protocolType = ProtocolType.Tcp)
        {
            var socket = new Socket(socketType, protocolType);
            bool disposeSocket = false;
            try
            {                
                using (SocketAwaitableEventArgs args = new SocketAwaitableEventArgs())
                {
                    args.RemoteEndPoint = endpoint;
                    await socket.ConnectSocketAsync(args);
                }
            }
            catch (Exception)
            {
                disposeSocket = true;
                throw;
            }
            finally
            {
                if (disposeSocket)
                {
                    socket.Dispose();
                    socket = null;
                }
            }

            return socket.ToConnection();
        }
示例#3
0
        static SocketAwaitableEventArgs OperationAsync(this Socket socket, SocketAwaitableEventArgs awaitable, SocketOperationDelegate socketFunc)
        {
            awaitable.StartOperation();

            if (!socketFunc(socket, awaitable))
            {
                awaitable.CompleteOperation();
            }

            return awaitable;
        }
示例#4
0
 public static SocketAwaitableEventArgs SendSocketAsync(this Socket socket, SocketAwaitableEventArgs awaitable)
 {
     return OperationAsync(socket, awaitable, SendAsyncHandler);
 }
示例#5
0
 public static SocketAwaitableEventArgs ReceiveSocketAsync(this Socket socket, SocketAwaitableEventArgs awaitable)
 {
     return OperationAsync(socket, awaitable, ReceiveAsyncHandler);
 }
示例#6
0
 public static SocketAwaitableEventArgs ConnectSocketAsync(this Socket socket, SocketAwaitableEventArgs awaitable)
 {
     return OperationAsync(socket, awaitable, ConnectAsyncHandler);
 }