FreeBuffer() 공개 메소드

public FreeBuffer ( ) : void
리턴 void
예제 #1
0
 private void EndTcpConnection(Server <C> .Connection <C> connection)
 {
     if (connection.Close())
     {
         this.OnEndTcpConnection(connection);
         if (connection.Socket.Connected)
         {
             try
             {
                 connection.Socket.Shutdown(SocketShutdown.Both);
             }
             catch (SocketException)
             {
             }
         }
         if (connection.IsSocketAccepted && this.socketReuseEnabled)
         {
             try
             {
                 try
                 {
                     ServerAsyncEventArgs serverAsyncEventArgs = EventArgsManager.Get();
                     serverAsyncEventArgs.FreeBuffer();
                     serverAsyncEventArgs.DisconnectReuseSocket = true;
                     serverAsyncEventArgs.Completed             = new ServerAsyncEventArgs.CompletedEventHandler(this.Disconnect_Completed);
                     if (!connection.Socket.DisconnectAsync(serverAsyncEventArgs))
                     {
                         serverAsyncEventArgs.OnCompleted(connection.Socket);
                     }
                 }
                 catch (SocketException)
                 {
                 }
             }
             catch (NotSupportedException)
             {
                 this.socketReuseEnabled = false;
             }
         }
         if (!this.socketReuseEnabled)
         {
             connection.Socket.Close();
         }
     }
 }
예제 #2
0
 private void EnqueueAsyncAccepts(object stateInfo)
 {
     lock (this.sync)
     {
         while (true)
         {
             int num = Thread.VolatileRead(ref this.acceptBacklog);
             if (!this.isRunning || num >= this.minAcceptBacklog)
             {
                 break;
             }
             if (Interlocked.CompareExchange(ref this.acceptBacklog, num + 1, num) == num)
             {
                 ServerAsyncEventArgs serverAsyncEventArgs = EventArgsManager.Get();
                 serverAsyncEventArgs.FreeBuffer();
                 this.listener.AcceptAsync(serverAsyncEventArgs, new ServerAsyncEventArgs.CompletedEventHandler(this.Accept_Completed));
             }
         }
     }
 }