Author: ggregory
Date: Fri May 16 20:49:46 2014
New Revision: 1595343

URL: http://svn.apache.org/r1595343
Log:
Stop running the server if the server socket is closed. Now, the super class 
implements Runnable, so subclasses do not need to.

Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/TCPSocketServer.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/UDPSocketServer.java

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/TCPSocketServer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/TCPSocketServer.java?rev=1595343&r1=1595342&r2=1595343&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/TCPSocketServer.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/TCPSocketServer.java
 Fri May 16 20:49:46 2014
@@ -38,7 +38,7 @@ import org.apache.logging.log4j.core.con
  * @param <T>
  *            The kind of input stream read
  */
-public class TCPSocketServer<T extends InputStream> extends 
AbstractSocketServer<T> implements Runnable {
+public class TCPSocketServer<T extends InputStream> extends 
AbstractSocketServer<T> {
 
     /**
      * Thread that processes the events.
@@ -193,6 +193,9 @@ public class TCPSocketServer<T extends I
     @Override
     public void run() {
         while (isActive()) {
+            if (serverSocket.isClosed()) {
+                return;
+            }
             try {
                 // Accept incoming connections.
                 final Socket clientSocket = serverSocket.accept();
@@ -206,6 +209,10 @@ public class TCPSocketServer<T extends I
                 handlers.put(Long.valueOf(handler.getId()), handler);
                 handler.start();
             } catch (final IOException ioe) {
+                if (serverSocket.isClosed()) {
+                    // OK we're done.
+                    return;
+                }
                 System.out.println("Exception encountered on accept. Ignoring. 
Stack Trace :");
                 ioe.printStackTrace();
             }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/UDPSocketServer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/UDPSocketServer.java?rev=1595343&r1=1595342&r2=1595343&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/UDPSocketServer.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/server/UDPSocketServer.java
 Fri May 16 20:49:46 2014
@@ -35,7 +35,7 @@ import org.apache.logging.log4j.core.con
  * @param <T>
  *            The kind of input stream read
  */
-public class UDPSocketServer<T extends InputStream> extends 
AbstractSocketServer<T> implements Runnable {
+public class UDPSocketServer<T extends InputStream> extends 
AbstractSocketServer<T> {
 
     /**
      * Creates a socket server that reads JSON log events.
@@ -143,18 +143,33 @@ public class UDPSocketServer<T extends I
     @Override
     public void run() {
         while (isActive()) {
+            if (datagramSocket.isClosed()) {
+                // OK we're done.
+                return;
+            }
             try {
                 final byte[] buf = new byte[maxBufferSize];
                 final DatagramPacket packet = new DatagramPacket(buf, 
buf.length);
                 datagramSocket.receive(packet);
-                final ByteArrayInputStream bais = new 
ByteArrayInputStream(packet.getData(), packet.getOffset(),
-                        packet.getLength());
+                final ByteArrayInputStream bais = new 
ByteArrayInputStream(packet.getData(), packet.getOffset(), packet.getLength());
                 logEventInput.logEvents(logEventInput.wrapStream(bais), this);
             } catch (final OptionalDataException e) {
+                if (datagramSocket.isClosed()) {
+                    // OK we're done.
+                    return;
+                }
                 logger.error("OptionalDataException eof=" + e.eof + " length=" 
+ e.length, e);
             } catch (final EOFException e) {
+                if (datagramSocket.isClosed()) {
+                    // OK we're done.
+                    return;
+                }
                 logger.info("EOF encountered");
             } catch (final IOException e) {
+                if (datagramSocket.isClosed()) {
+                    // OK we're done.
+                    return;
+                }
                 logger.error("Exception encountered on accept. Ignoring. Stack 
Trace :", e);
             }
         }


Reply via email to