/// <summary> /// Allows this instance to receive incoming requests. /// </summary> /// <remarks>This method must be called before you call the /// <see cref="System.Net.HttpListener.GetContext"/> method. If /// the service was already started, the call has no effect. After you /// have started an <itemref>HttpListener</itemref> object, you can use /// the <see cref='System.Net.HttpListener.Stop'/> method to stop it. /// </remarks> public void Start() { lock (this) { if (m_Closed) { throw new ObjectDisposedException(); } // If service was already started, the call has no effect. if (m_ServiceRunning) { return; } m_listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { // set NoDelay to increase HTTP(s) response times m_listener.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); } catch {} try { // Start server socket to accept incoming connections. m_listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); } catch {} IPAddress addr; if (Microsoft.SPOT.Hardware.SystemInfo.IsEmulator) { addr = IPAddress.Any; } else { addr = IPAddress.GetDefaultLocalAddress(); } IPEndPoint endPoint = new IPEndPoint(addr, m_Port); m_listener.Bind(endPoint); // Starts to listen to maximum of 10 connections. m_listener.Listen(MaxCountOfPendingConnections); // Create a thread that blocks on m_listener.Accept() - basically waits for connection from client. m_thAccept = new Thread(AcceptThreadFunc); m_thAccept.Start(); // Waits for thread that calls Accept to start. m_RequestArrived.WaitOne(); } }