Author: ron.sigal(a)jboss.com
Date: 2008-05-01 17:00:42 -0400 (Thu, 01 May 2008)
New Revision: 4109
Modified:
remoting2/branches/2.x/src/main/org/jboss/remoting/transport/socket/SocketServerInvoker.java
Log:
JBREM-930: Makes multiple attempts to replace ServerSocket.
Modified:
remoting2/branches/2.x/src/main/org/jboss/remoting/transport/socket/SocketServerInvoker.java
===================================================================
---
remoting2/branches/2.x/src/main/org/jboss/remoting/transport/socket/SocketServerInvoker.java 2008-05-01
07:20:45 UTC (rev 4108)
+++
remoting2/branches/2.x/src/main/org/jboss/remoting/transport/socket/SocketServerInvoker.java 2008-05-01
21:00:42 UTC (rev 4109)
@@ -170,7 +170,31 @@
ServerSocket oldServerSocket = acceptThreads[i].getServerSocket();
InetAddress address = oldServerSocket.getInetAddress();
int port = oldServerSocket.getLocalPort();
- ServerSocket newServerSocket = createServerSocket(port, backlog, address);
+ ServerSocket newServerSocket = null;
+
+ for (int j = 0; j < 4; j++)
+ {
+ try
+ {
+ newServerSocket = createServerSocket(port, backlog, address);
+ break;
+ }
+ catch (Exception e)
+ {
+ if (j < 3)
+ {
+ // Wait for end of TIME_WAIT state (1 to 4 minutes).
+ log.warn("Unable to recreate ServerSocket: will try again in 65
seconds", e);
+ try {Thread.sleep(65000);} catch (InterruptedException ignored) {}
+ }
+ else
+ {
+ log.error("Unable to recreate ServerSocket after 260
seconds", e);
+ return;
+ }
+ }
+ }
+
acceptThreads[i].setServerSocket(newServerSocket);
oldServerSocket.close();
log.info(acceptThreads[i] + " has been updated with new
ServerSocket");
@@ -793,12 +817,11 @@
{
log.debug("refreshing server socket");
refreshServerSocket();
+ log.debug("server socket refreshed");
} catch (IOException e)
{
- log.debug("could not refresh server socket");
- log.debug("message is: "+e.getMessage());
+ log.error("could not refresh server socket", e);
}
- log.debug("server socket refreshed");
}
try
Show replies by date