internal void HandleAccept(SocketAsyncEventArgs AcceptArgs) { if (AcceptArgs.SocketError != SocketError.Success) { HandleBadAccept(AcceptArgs); return; } StartAccept(); SocketAsyncEventArgs ReceiveArgs; if (ReceivePool.TryPop(out ReceiveArgs)) { ReceiveArgs.UserToken = (T)Activator.CreateInstance(typeof(T)); ((T)ReceiveArgs.UserToken).Socket = AcceptArgs.AcceptSocket; ((T)ReceiveArgs.UserToken).ReceiveEventArgs = ReceiveArgs; AcceptArgs.AcceptSocket = null; AcceptPool.Push(AcceptArgs); if (ConnectionAccepted != null) { ConnectionAccepted.Invoke((T)ReceiveArgs.UserToken); } StartReceive(ReceiveArgs); } else { HandleAccept(AcceptArgs); } }
public override void Close() { lock (lckObject) { try { BaseSocket.Shutdown(SocketShutdown.Both); } catch { } try { BaseSocket.Dispose(); } catch { } State = ConnectionState.Closed; SocketReceiveArgs.Completed -= socketArgsRecv_Completed; SocketSendArgs.Completed -= socketArgsSend_Completed; ReceivePool.Return(SocketReceiveArgs); SendPool.Return(SocketSendArgs); } }
public void HandleAccept(SocketAsyncEventArgs AcceptArgs) { if (AcceptArgs.SocketError != SocketError.Success) { HandleBadAccept(AcceptArgs); return; } StartAccept(); SocketAsyncEventArgs ReceiveArgs; if (ReceivePool.TryPop(out ReceiveArgs)) { Console.WriteLine("Received New Connection!"); // Create Session ReceiveArgs.UserToken = new Session(); ((Session)ReceiveArgs.UserToken).Socket = AcceptArgs.AcceptSocket; ((Session)ReceiveArgs.UserToken).ReceiveEventArgs = ReceiveArgs; // Create User AcceptArgs.AcceptSocket = null; AcceptPool.Push(AcceptArgs); StartReceive(ReceiveArgs); } else { HandleAccept(AcceptArgs); } }