Now closing SockeHubAppender's serverSocket if the appender is closed
Verified a reload of the same sockethubappender configuration is able to re-use the same socket port, and sockethubreceiver successfully reconnects
git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/trunk@986563 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/log4j/net/SocketHubAppender.java b/src/main/java/org/apache/log4j/net/SocketHubAppender.java
index 665c58a..7c69acd 100644
--- a/src/main/java/org/apache/log4j/net/SocketHubAppender.java
+++ b/src/main/java/org/apache/log4j/net/SocketHubAppender.java
@@ -124,9 +124,10 @@
* The MulticastDNS zone advertised by a SocketHubAppender
*/
public static final String ZONE = "_log4j_obj_tcpaccept_appender.local.";
+ private ServerSocket serverSocket;
- public SocketHubAppender() { }
+ public SocketHubAppender() { }
/**
Connects to remote server at <code>address</code> and <code>port</code>. */
@@ -176,7 +177,7 @@
LogLog.debug("stopping ServerSocket");
serverMonitor.stopMonitor();
serverMonitor = null;
-
+
// close all of the connections
LogLog.debug("closing client connections");
while (oosList.size() != 0) {
@@ -369,8 +370,7 @@
This class is used internally to monitor a ServerSocket
and register new connections in a vector passed in the
constructor. */
- private
- class ServerMonitor implements Runnable {
+ private class ServerMonitor implements Runnable {
private int port;
private Vector oosList;
private boolean keepRunning;
@@ -392,13 +392,18 @@
/**
Stops the monitor. This method will not return until
the thread has finished executing. */
- public
- synchronized
- void stopMonitor() {
+ public synchronized void stopMonitor() {
if (keepRunning) {
LogLog.debug("server monitor thread shutting down");
keepRunning = false;
try {
+ if (serverSocket != null) {
+ serverSocket.close();
+ serverSocket = null;
+ }
+ } catch (IOException ioe) {}
+
+ try {
monitorThread.join();
}
catch (InterruptedException e) {
@@ -428,7 +433,7 @@
they connect to the socket. */
public
void run() {
- ServerSocket serverSocket = null;
+ serverSocket = null;
try {
serverSocket = createServerSocket(port);
serverSocket.setSoTimeout(1000);