private void Item_Completed(object sender, SocketAsyncEventArgs e) { acceptEvent.Set(); IChannelHandler handler = null; SocketArgEvent arg = new SocketArgEvent(); IPEndPoint point = e.AcceptSocket.RemoteEndPoint as IPEndPoint; arg.remoteIP = point.Address.ToString(); arg.remotePort = point.Port; point = e.AcceptSocket.LocalEndPoint as IPEndPoint; arg.localIP = point.Address.ToString(); arg.localPort = point.Port; arg.chanel = socketChannel; TCPSocketChannel channel = new TCPSocketChannel(); channel.HandlerTypes = this.handers; channel.Socket = e.AcceptSocket; channel.SocketArgEvent = arg; arg.chanel = channel; if (handers.TryGetValue(HanderType.ReadWrite, out handler)) { handler.ChannelActive(arg); } lock (lock_obj) { channels.Add(arg); } Interlocked.Increment(ref m_numConnectedSockets); FreeArgEvent(e); WorkThread(); }