FELIX-734 Apply patch by Patrick Frohan (thanks) to allow setting the socket timeout

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@739934 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/shell.remote/src/main/java/org/apache/felix/shell/remote/Listener.java b/shell.remote/src/main/java/org/apache/felix/shell/remote/Listener.java
index a00d638..689cdda 100644
--- a/shell.remote/src/main/java/org/apache/felix/shell/remote/Listener.java
+++ b/shell.remote/src/main/java/org/apache/felix/shell/remote/Listener.java
@@ -23,6 +23,7 @@
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
+import java.net.SocketTimeoutException;
 
 import org.osgi.framework.BundleContext;
 
@@ -40,6 +41,7 @@
     private ServerSocket m_ServerSocket;
     private AtomicInteger m_UseCounter;
     private int m_MaxConnections;
+    private int m_SoTimeout;
 
 
     /**
@@ -50,6 +52,7 @@
         //configure from framework property
         m_Ip = getProperty( bundleContext, "osgi.shell.telnet.ip", "127.0.0.1" );
         m_Port = getProperty( bundleContext, "osgi.shell.telnet.port", 6666 );
+        m_SoTimeout = getProperty( bundleContext, "osgi.shell.telnet.socketTimeout", 0 );
         m_MaxConnections = getProperty( bundleContext, "osgi.shell.telnet.maxconn", 2 );
         m_UseCounter = new AtomicInteger( 0 );
         m_ListenerThread = new Thread( new Acceptor(), "telnetconsole.Listener" );
@@ -104,7 +107,8 @@
                     should be handled properly, but denial of service attacks via massive parallel
                     program logins should be prevented with this.
                 */
-                m_ServerSocket = new ServerSocket( m_Port, 1, InetAddress.getByName(m_Ip) );
+                m_ServerSocket = new ServerSocket( m_Port, 1, InetAddress.getByName( m_Ip ) );
+                m_ServerSocket.setSoTimeout( m_SoTimeout );
                 do
                 {
                     try
@@ -131,6 +135,9 @@
                     catch ( SocketException ex )
                     {
                     }
+                    catch ( SocketTimeoutException ste) {
+                        // Caught socket timeout exception. continue
+                    }
                 }
                 while ( !m_Stop );