I removed my previous post about this topic because I apparently have pasted the wrong code. Sorry for the confusion and thanks for being patient.
I am having problem to kill the following script completely. The script basically does the following. The main thread creates a new thread, which does a completely useless thing, and then starts excepting for a connection via socket. # start import pickle import signal import simplejson import socket import sys import threading import time counter = 0 class WorkerThread(threading.Thread): def run(self): global counter while True: counter += 1 time.sleep(10) worker_thread = WorkerThread() worker_thread.start() server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('', 2727)) server.listen(2) def cleanup(signal, frame): print "die now" worker_thread.join(1) server.shutdown(socket.SHUT_RDWR) sys.exit(0) signal.signal(signal.SIGINT, cleanup) while True: channel, details = server.accept() stats = { 'key': "value" } s = simplejson.dumps(stats) channel.send(s) channel.close() # end The way I can think of right now is to kill the script using Ctrl+C. Hence, the signal handler in the code. However, the interpreter complains: $ python ex_server.py die now Traceback (most recent call last): File "ex_server.py", line 33, in ? channel, details = server.accept() File "/usr/lib/python2.4/socket.py", line 169, in accept sock, addr = self._sock.accept() File "ex_server.py", line 28, in cleanup server.shutdown(socket.SHUT_RDWR) File "<string>", line 1, in shutdown socket.error: (128, 'Transport endpoint is not connected') Does anybody know a better way to do this? Thank you. Buhi -- http://mail.python.org/mailman/listinfo/python-list