private void ProcessAccept(object sender, SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success && e.AcceptSocket != null && e.AcceptSocket.Connected) { e.AcceptSocket.Close(); _poolOfAcceptEventArgs.Push(e); StartAccept(); return; } ClientToken clientToken = _poolOfDataEventArgs.Pop(); clientToken.AcceptConnection(e, true); _poolOfAcceptEventArgs.Push(e); Interlocked.Increment(ref _numberOfAcceptedSockets); //Fire ClientConnected event if (ClientConnected != null) { if (CallClientConnectedAsync) { ClientConnected.BeginInvoke(this, clientToken.Id, r => ClientConnected.EndInvoke(r), null); } else { ClientConnected(this, clientToken.Id); } } StartReceive(clientToken); StartAccept(); }
private void OnClientConnect(IAsyncResult ar) { if (!_isStarted) { return; } Thread.CurrentThread.Name = "OnClientConnect(Server)"; Socket socket = _socket.EndAccept(ar); _socketList.Add(socket); IPEndPoint ipEndPoint = socket.RemoteEndPoint as IPEndPoint; if (ipEndPoint != null) { Log(LogLevel.Info, "Client Connected " + ipEndPoint.Address + " port " + ipEndPoint.Port); Thread listenWorkerThread = new Thread(StartListening); listenWorkerThread.Name = "ListenThread_" + ipEndPoint; listenWorkerThread.Start(socket); if (ClientConnected != null) { ClientConnected.BeginInvoke(this, new ClientConnectionEventArgs(ipEndPoint), null, null); } } _socket.BeginAccept(new AsyncCallback(OnClientConnect), null); }