In the version of the XmlRpc library I'm using (1.2-b1), the exception you're getting is actually being thrown by the WebServer.run() method. It looks like WebServer.start() is spawning a new thread to invoke WebServer.run().

Therefore, you'd probably be best to override WebServer.run(). Something like:

class MyWebServer extends WebServer {
  public void run() {
    try {
      super.run();
    } catch (Exception e) {
      System.exit(<n>);
    }
  }
}


Another possible idea would be to open up a "normal" socket on your port and catch any errors you get. Then, you'd close it and start your server on the same port.

The specific error you're getting, as I'm sure you know, is because you've already got a socket open / server listening on the specified port. Trying to open a listener on that port should give you the same error back, but in a more predictable way (since it would be on the same thread).

Your startup shell script could/should also be looking for running versions of your server and fail if it already sees a version running. This would be a pretty smart thing to do regardless of what exceptions you're trying to catch.


Markus Fischer wrote:
Hi,

Adam Taft wrote:
Markus Fischer wrote:
I'm not very confident with Java so I wasn't able to figure out how I
can signal the shell that an error occurred in this special case.
Catch the error and then do:

System.exit(n);

where n is the error number you want to return to the shell.

I tried being that clever, but it seems that I was trying to catch the
Exception in the wrong place. My code looks like this:

WebServer webserver = new WebServer (port);
webserver.addHandler(handler, object);
webserver.start ();

When the BindException is thrown he's in start() method, putting the
exception block around it doesn't catch it.

I *think* if it would have been thrown there I would have gotten the
right return value on the shell but it isn't.

thanks,
- Markus

Reply via email to