public void run() {
		ServerSocket serversocket = null;
		Socket s;

		InputStreamReader input;
		BufferedReader b;
		
		String message = null;
		boolean done = false;

		try {
			serversocket = new ServerSocket(process.getPort(), 1);
			serversocket.setSoTimeout(0);

		} catch (IOException e) {
			String msg =
				String.format("Error: failed to launch Listener at %s.", 
			process.getInfo());
			System.err.println(msg);
			System.err.println(e.getMessage());
			System.exit(1);
		}
		
		while (! done) {
			s = null;
			try {
				s = serversocket.accept();
			} catch (IOException e) {
				String msg =
					String.format("Error: failed to accept connection at %s.", 
				process.getInfo());
				System.err.println(msg);
				System.err.println(e.getMessage());
				System.exit(1);
			}
			/* Accepted connection from a MessageHandler. */
			try {
				input = new InputStreamReader(s.getInputStream());
				b = new BufferedReader(input);
				while((message = b.readLine()) != null) {
					Message m = Message.parse(message);
					/* Notify process */
					process.receive(m);
				}
				/* Close connection */
				b.close();
				s.close();
			} catch (IOException e) {
				String msg =
					String.format("Error: failed to read() at %s.", 
				process.getInfo());
				System.err.println(msg);
				System.err.println(e.getMessage());
				System.exit(1);
			}
		}
	}