private void ProcessAccept(SocketAsyncEventArgs acceptEventArgs) { StartAccept(); if (acceptEventArgs.SocketError != SocketError.Success) { HandleBadAccept(acceptEventArgs); _maxAcceptOpsEnforcer.Release(); return; } SocketAsyncEventArgs recEventArgs; if (_poolOfRecEventArgs.TryPop(out recEventArgs)) { ((Session)recEventArgs.UserToken).Socket = acceptEventArgs.AcceptSocket; acceptEventArgs.AcceptSocket = null; _poolOfAcceptEventArgs.Push(acceptEventArgs); _maxAcceptOpsEnforcer.Release(); Console.WriteLine("<Session " + ((Session)recEventArgs.UserToken).Id + "> is now in use."); StartReceive(recEventArgs); } else { HandleBadAccept(acceptEventArgs); Console.WriteLine("Cannot handle this session, there are no more receive objects available for us."); } }
public void SendData(Socket socket, byte[] data) { _maxSaeaSendEnforcer.Wait(); SocketAsyncEventArgs sendEventArgs; _poolOfSendEventArgs.TryPop(out sendEventArgs); var token = (SendDataToken)sendEventArgs.UserToken; token.DataToSend = data; token.SendBytesRemainingCount = data.Length; sendEventArgs.AcceptSocket = socket; StartSend(sendEventArgs); //Console.WriteLine(PacketFiltered(Encoding.Default.GetString(data))); }
private void StartAccept() { SocketAsyncEventArgs acceptEventArgs; _maxAcceptOpsEnforcer.Wait(); if (_poolOfAcceptEventArgs.TryPop(out acceptEventArgs)) { _maxConnectionsEnforcer.Wait(); bool willRaiseEvent = _listenSocket.AcceptAsync(acceptEventArgs); if (!willRaiseEvent) { ProcessAccept(acceptEventArgs); } } }