Socket Exceptions

In Java 1.0, a problem with a socket method is likely to throw a java.net.SocketException, which is a subclass of IOException:

public class SocketException extends IOException

Indeed, even in Java 1.1 and later, many methods are declared to throw only SocketException or even IOException rather than the more specific subclasses. However, knowing that a problem occurred is often not sufficient to deal with the problem. Did the remote host refuse the connection because it was busy? Did the remote host refuse the connection because no service was listening on the port? Did the connection attempt timeout because of network congestion or because the host was down? Java 1.1 added three new subclasses of SocketException that provide more information about what went wrong: BindException, ConnectException, and NoRouteToHostException:

public class BindException extends SocketException
public class ConnectException extends SocketException
public class NoRouteToHostException extends SocketException

A BindException is thrown if you try to construct a Socket or ServerSocket object on a local port that is in use or that you do not have sufficient privileges to use. A ConnectException is thrown when a connection is refused at the remote host, which usually happens because the host is busy or no process is listening on that port. Finally, a NoRouteToHostException indicates that the connection has timed out.

Code that you write in Java 1.0 should catch SocketException and IOException ...

Get Java Network Programming, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.