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(); } } }
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); } } }