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);