diff --git a/lib/py/src/server/TServer.py b/lib/py/src/server/TServer.py
index a44ab52..21a90c8 100644
--- a/lib/py/src/server/TServer.py
+++ b/lib/py/src/server/TServer.py
@@ -170,7 +170,6 @@
         print '%s, %s, %s' % (type(x), x, traceback.format_exc())
 
 
-
 class TForkingServer(TServer):
 
   """A Thrift server that forks a new process for each request"""
@@ -191,6 +190,13 @@
     self.children = []
 
   def serve(self):
+    def try_close(file):
+      try:
+        file.close()
+      except IOError, e:
+        print '%s, %s, %s' % (type(e), e, traceback.format_exc())
+
+
     self.serverTransport.listen()
     while True:
       client = self.serverTransport.accept()
@@ -202,6 +208,12 @@
           self.children.append(pid)
           self.collect_children()
 
+          # Parent must close socket or the connection may not get
+          # closed promptly
+          itrans = self.inputTransportFactory.getTransport(client)
+          otrans = self.outputTransportFactory.getTransport(client)
+          try_close(itrans)
+          try_close(otrans)
         else:
           itrans = self.inputTransportFactory.getTransport(client)
           otrans = self.outputTransportFactory.getTransport(client)
@@ -209,24 +221,20 @@
           iprot = self.inputProtocolFactory.getProtocol(itrans)
           oprot = self.outputProtocolFactory.getProtocol(otrans)
 
+          ecode = 0
           try:
             while True:
               self.processor.process(iprot, oprot)
           except TTransport.TTransportException, tx:
             pass
           except Exception, e:
-            print '%s, %s, %s' % (type(x), x, traceback.format_exc())
-            os._exit(1)
+            print '%s, %s, %s' % (type(e), e, traceback.format_exc())
+            ecode = 1
+          finally:
+            try_close(itrans)
+            try_close(otrans)
 
-          def try_close(file):
-            try:
-              file.close()
-            except IOError, e:
-              print '%s, %s, %s' % (type(x), x, traceback.format_exc())
-
-          try_close(itrans)
-          try_close(otrans)
-          os._exit(0)
+          os._exit(ecode)
 
       except TTransport.TTransportException, tx:
         pass
@@ -234,7 +242,6 @@
         print '%s, %s, %s' % (type(x), x, traceback.format_exc())
 
 
-
   def collect_children(self):
     while self.children:
       try:
diff --git a/test/py/RunClientServer.py b/test/py/RunClientServer.py
index f05dc5d..cbff372 100755
--- a/test/py/RunClientServer.py
+++ b/test/py/RunClientServer.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python
 
+import time
 import subprocess
 import sys
 import os
@@ -8,12 +9,20 @@
 def relfile(fname):
     return os.path.join(os.path.dirname(__file__), fname)
 
-serverproc = subprocess.Popen([sys.executable, relfile("TestServer.py")])
-try:
+def runTest(server_class):
+    print "Testing ", server_class
+    serverproc = subprocess.Popen([sys.executable, relfile("TestServer.py"), server_class])
+    try:
 
-    ret = subprocess.call([sys.executable, relfile("TestClient.py")])
-    if ret != 0:
-        raise Exception("subprocess failed")
-finally:
-    # fixme: should check that server didn't die
-    os.kill(serverproc.pid, signal.SIGKILL)
+        ret = subprocess.call([sys.executable, relfile("TestClient.py")])
+        if ret != 0:
+            raise Exception("subprocess failed")
+    finally:
+        # fixme: should check that server didn't die
+        os.kill(serverproc.pid, signal.SIGKILL)
+
+    # wait for shutdown
+    time.sleep(5)
+
+map(runTest, ["TForkingServer", "TThreadPoolServer",
+              "TThreadedServer", "TSimpleServer"])
diff --git a/test/py/TestClient.py b/test/py/TestClient.py
index d7b65b7..fb0133a 100755
--- a/test/py/TestClient.py
+++ b/test/py/TestClient.py
@@ -86,6 +86,12 @@
       self.assertEqual(x.errorCode, 1001)
       self.assertEqual(x.message, 'Xception')
 
+    try:
+      self.client.testException("throw_undeclared")
+      self.fail("should have thrown exception")
+    except Exception: # type is undefined
+      pass
+
   def testAsync(self):
     start = time.time()
     self.client.testAsync(2)
diff --git a/test/py/TestServer.py b/test/py/TestServer.py
index 4c6cb8a..0247bc2 100755
--- a/test/py/TestServer.py
+++ b/test/py/TestServer.py
@@ -51,6 +51,8 @@
       x.errorCode = 1001
       x.message = str
       raise x
+    elif str == "throw_undeclared":
+      raise ValueError("foo")
 
   def testAsync(self, seconds):
     print 'testAsync(%d) => sleeping...' % seconds
@@ -62,5 +64,8 @@
 transport = TSocket.TServerSocket(9090)
 tfactory = TTransport.TBufferedTransportFactory()
 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
-server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
+
+ServerClass = getattr(TServer, sys.argv[1])
+
+server = ServerClass(processor, transport, tfactory, pfactory)
 server.serve()
