/** * Start the server. */ public void Start() { this.server.Start(); log.Trace("Server started at port " + PolicyPort.ToString()); this.listening = true; AcceptProcessorDelegate processor = new AcceptProcessorDelegate(this.AcceptProcessor); processor.BeginInvoke(this, null, null); }
/** * Process the client connection. */ private void ProcessClient(IAsyncResult ar) { System.Net.Sockets.Socket client = null; try { // Get socket client = this.server.EndAcceptSocket(ar); client.ReceiveTimeout = WaitTimeout; // Set timeouts client.SendTimeout = WaitTimeout; log.Debug("New client connected."); // Receive data byte[] buffer = new byte[MaxPktSize]; if (client.Receive(buffer, MaxPktSize, System.Net.Sockets.SocketFlags.None) > 0) { // Get string from buffer string data = Encoding.ASCII.GetString(buffer); data = data.Substring(0, data.IndexOf('\0')); log.Debug("<-- " + data); if (data == PolicyRequest) // If data is policy request { // we send the policy fileName log.Debug("Sending policy request..."); client.SendFile(PolicyFile); } } // Start listenning this.server.BeginAcceptTcpClient(this.DoAcceptTcpClientCallback, this); } catch (System.Exception e) { log.Error("Error processing client : " + e.Message); } if (client != null) { client.Close(); // close socket } if (this.listening) { AcceptProcessorDelegate processor = new AcceptProcessorDelegate(this.AcceptProcessor); processor.BeginInvoke(this, null, null); } }