コード例 #1
0
        private static void CallbackAccept(IAsyncResult ar)
        {
            AcceptSocketToken acceptSocketToken = ar.AsyncState as AcceptSocketToken;

            if (acceptSocketToken != null)
            {
                try
                {
                    Socket clientSocket = _serverSocket.EndAccept(ar);
                    // set this sockt into the token
                    acceptSocketToken.Socket = clientSocket;
                }
                catch (SocketException socketException)
                {
                    acceptSocketToken.Socket = null;
                    Logger.Log("CallbackAccept- " + socketException);
                }
                catch (Exception exception)
                {
                    acceptSocketToken.Socket = null;
                    Logger.Log("CallbackAccept- " + exception);
                }
                finally
                {
                    acceptSocketToken.Event.Set();
                }
            }
        }
コード例 #2
0
 private static void StartListening(object state)
 {
     while (true)
     {
         AcceptSocketToken acceptSocketToken = new AcceptSocketToken()
         {
             Event = new AutoResetEvent(false)
         };
         IAsyncResult result = _serverSocket.BeginAccept(CallbackAccept, acceptSocketToken);
         result.AsyncWaitHandle.WaitOne();
         acceptSocketToken.Event.WaitOne();
         // got socket, give it to request handler
         if (acceptSocketToken.Socket != null)
         {
             SocketRequestHandler requestHandler = new SocketRequestHandler(acceptSocketToken.Socket, Logger);
             ThreadPool.QueueUserWorkItem(requestHandler.HandleConnection);
         }
     }
 }