What to do when ServerSocket launches IOException and supports server operation

Basically, I want to create a reliable server.

while (keepRunning.get()) {
    try {
        Socket clientSocket = serverSocket.accept();

        ... spawn a new thread to handle the client ...
    } catch (IOException e) {
        e.printStackTrace();
        // NOW WHAT?
    }
}

In the IOException block, what should I do? Is the server socket to blame, so it needs to be recreated? For example, wait a few seconds and then

serverSocket = ServerSocketFactory.getDefault().createServerSocket(MY_PORT);

However, if the server socket is still in order, it is a pity to close it and kill all previously accepted connections that are still being reported.

EDIT: after some answers, here is my attempt to deal with an IOException. Will the implementation guarantee server preservation and only re-creation of the server socket if necessary?

while (keepRunning.get()) {
    try {
        Socket clientSocket = serverSocket.accept();

        ... spawn a new thread to handle the client ...
        bindExceptionCounter = 0;
    } catch (IOException e) {
        e.printStackTrace();

        recreateServerSocket();
    }
}

private void recreateServerSocket() {
    while (keepRunning) {
        try {
            logger.info("Try to re-create Server Socket");
            ServerSocket socket = ServerSocketFactory.getDefault().createServerSocket(RateTableServer.RATE_EVENT_SERVER_PORT);

            // No exception thrown, then use the new socket.
            serverSocket = socket;
            break;
        } catch (BindException e) {
            logger.info("BindException indicates that the server socket is still good.", e);
            bindExceptionCounter++;

            if (bindExceptionCounter < 5) {
                break;
            }
        } catch (IOException e) {
            logger.warn("Problem to re-create Server Socket", e);
            e.printStackTrace();

            try {
                Thread.sleep(30000);
            } catch (InterruptedException ie) {
                logger.warn(ie);
            }
        }
    }
}    
+5
source share
4 answers

, , . , , . , , . , , , - .

, , . , , - .

+4

, IOException, . ? , ?

, accept() ing. , IOException .

, , . , , , , . , . @mdma, .

+1

IOException accept(), () , . . , . serverSocket ( ), , , . , , , .

+1

, - , , .

, . , , .

+1
source

All Articles