public void start()
	{
		if (running)
		{
			return;
		}

        Log.i(LOG_TAG, "start()");

		running = true;

		executor.execute(new Runnable()
		{
			public void run()
			{
				try
				{
					while (running)
					{
                        Log.i(LOG_TAG, "Listening for new connections");

						Socket socket = serverSocket.accept();
						String localHostName = socket.getLocalAddress().getHostName();

						if (!allowExternalAccess && localHostName.compareTo("localhost") != 0)
						{
                            Log.e(LOG_TAG, "External Access Request - " + localHostName);
							continue;
						}

                        Log.i(LOG_TAG, "Serving request  - " + socket.getLocalAddress());

						executor.execute(new HttpSession(socket, dateFormatter, contentInputStreamAdapter));

                        Log.i(LOG_TAG, "Completed - " + socket.getLocalAddress());
					}
				}
				catch (Exception e)
				{
					if (running)
					{
						running = false;

						if (e instanceof InterruptedIOException)
						{
                            Log.e(LOG_TAG, "serverSocket.accept() timed out : ", e);
						}
						else
						{
                            Log.e(LOG_TAG, "Error while listening on serverSocket : ", e);
						}
					}
				}
			}
		});
	}