diff --git a/lib/java/src/transport/TServerSocket.java b/lib/java/src/transport/TServerSocket.java
index 8a8421d..ab2b5e7 100644
--- a/lib/java/src/transport/TServerSocket.java
+++ b/lib/java/src/transport/TServerSocket.java
@@ -4,6 +4,7 @@
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketException;
 
 /**
  * Wrapper around ServerSocket for Thrift.
@@ -12,19 +13,55 @@
  */
 public class TServerSocket extends TServerTransport {
   
+  /**
+   * Underlying serversocket object
+   */
   private ServerSocket serverSocket_ = null;
+
+  /**
+   * Port to listen on
+   */
   private int port_ = 0;
 
+  /**
+   * Timeout for client sockets from accept
+   */
+  private int clientTimeout_ = 0;
+
+  /**
+   * Creates a server socket from underlying socket object
+   */
   public TServerSocket(ServerSocket serverSocket) {
-    serverSocket_ = serverSocket;
+    this(serverSocket, 0);
   }
 
+  /**
+   * Creates a server socket from underlying socket object
+   */
+  public TServerSocket(ServerSocket serverSocket, int clientTimeout) {
+    serverSocket_ = serverSocket;
+    clientTimeout_ = clientTimeout;
+  }
+
+  /**
+   * Creates just a port listening server socket
+   */
   public TServerSocket(int port) throws TTransportException {
+    this(port, 0);
+  }
+
+  /**
+   * Creates just a port listening server socket
+   */
+  public TServerSocket(int port, int clientTimeout) throws TTransportException {
     port_ = port;
+    clientTimeout_ = clientTimeout;
     try {
+      // Make server socket
       serverSocket_ = new ServerSocket();
+      // Prevent 2MSL delay problem on server restarts
       serverSocket_.setReuseAddress(true);
-      serverSocket_.setSoTimeout(0);
+      // Bind to listening port
       serverSocket_.bind(new InetSocketAddress(port_));
     } catch (IOException ioe) {
       serverSocket_ = null;
@@ -32,7 +69,16 @@
     }
   }
 
-  public void listen() throws TTransportException {}
+  public void listen() throws TTransportException {
+    // Make sure not to block on accept
+    if (serverSocket_ != null) {
+      try {
+        serverSocket_.setSoTimeout(0);
+      } catch (SocketException sx) {
+        sx.printStackTrace();
+      }
+    }
+  }
   
   protected TSocket acceptImpl() throws TTransportException {
     if (serverSocket_ == null) {
@@ -40,7 +86,9 @@
     }
     try {
       Socket result = serverSocket_.accept();
-      return new TSocket(result);
+      TSocket result2 = new TSocket(result);
+      result2.setTimeout(clientTimeout_);
+      return result2;
     } catch (IOException iox) {
       throw new TTransportException(iox);
     }
diff --git a/lib/java/src/transport/TSocket.java b/lib/java/src/transport/TSocket.java
index 6b4fa3b..544a1d5 100644
--- a/lib/java/src/transport/TSocket.java
+++ b/lib/java/src/transport/TSocket.java
@@ -5,6 +5,7 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Socket;
+import java.net.SocketException;
 
 /**
  * Socket implementation of the TTransport interface. To be commented soon!
@@ -13,16 +14,27 @@
  */
 public class TSocket extends TIOStreamTransport {
 
-  /** Wrapped Socket object */
+  /**
+   * Wrapped Socket object
+   */
   private Socket socket_ = null;
   
-  /** Remote host */
+  /**
+   * Remote host
+   */
   private String host_  = null;
 
-  /** Remote port */
+  /**
+   * Remote port
+   */
   private int port_ = 0;
 
   /**
+   * Socket timeout
+   */
+  private int timeout_ = 0;
+
+  /**
    * Constructor that takes an already created socket.
    *
    * @param socket Already created socket object
@@ -30,6 +42,7 @@
    */
   public TSocket(Socket socket) throws TTransportException {
     socket_ = socket;
+   
     if (isOpen()) {
       try {
         inputStream_ = new BufferedInputStream(socket_.getInputStream(), 1024);
@@ -49,9 +62,36 @@
    * @param port Remote port
    */
   public TSocket(String host, int port) {
+    this(host, port, 500);
+  }
+
+  /**
+   * Creates a new unconnected socket that will connect to the given host
+   * on the given port.
+   *
+   * @param host    Remote host
+   * @param port    Remote port
+   * @param timeout Socket timeout
+   */
+  public TSocket(String host, int port, int timeout) {
     socket_ = new Socket();
     host_ = host;
     port_ = port;
+    timeout_ = timeout;
+  }
+
+  /**
+   * Sets the socket timeout
+   *
+   * @param timeout Milliseconds timeout
+   */
+  public void setTimeout(int timeout) {
+    timeout_ = timeout;
+    try {
+      socket_.setSoTimeout(timeout);
+    } catch (SocketException sx) {
+      sx.printStackTrace();
+    }
   }
 
   /**
