Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
            }
        }