#/usr/bin/env python import signal, sys, os, traceback from SocketServer import BaseRequestHandler, UnixDatagramServer from threading import Thread SOCK_PATH = "/tmp/pythonTest.sock" def PrintRequestHandler(BaseRequestHandler): def handle(self): data, client = self.request print "got data %s from client %s" % (data, client) def handleTermSignal(signum, frame): def doShutdown(): print "about to shutdown" server.shutdown() print "shutdown done" t = Thread(target=doShutdown) t.start() def cleanUp(): if os.path.exists(SOCK_PATH): os.remove(SOCK_PATH) if __name__ == '__main__': if os.path.exists(SOCK_PATH): print "socket %s already exists, exiting" % SOCK_PATH sys.exit() signal.signal(signal.SIGTERM, handleTermSignal) server = UnixDatagramServer(SOCK_PATH, PrintRequestHandler) try: server.serve_forever() except KeyboardInterrupt: cleanUp() # Don't break WCE shells, re http://www.cons.org/cracauer/sigint.html raise except: print "exception in server_forever:" traceback.print_exc() cleanUp()