diff options
-rwxr-xr-x | tupkg/server/tupkgs | 87 |
1 files changed, 82 insertions, 5 deletions
diff --git a/tupkg/server/tupkgs b/tupkg/server/tupkgs index 2c410a5..b4a3e86 100755 --- a/tupkg/server/tupkgs +++ b/tupkg/server/tupkgs @@ -11,12 +11,89 @@ # # Python Indentation: # ------------------- -# Use tabs not spaces. If you use vim, the following comment will -# configure it to use tabs. -# vim: ts=2 sw=2 noet ft=python -# +# For a vim: line to be effective, it must be at the end of the +# file. See the end of the file for more information. + +import sys +import socket +import threading +import select + +class ClientSocket(threading.Thread): + def __init__(self, socket, **other): + threading.Thread.__init__(self, *other) + self.socket = socket + + def close(self): + pass + + def run(self): + while len(self.socket.recv(1)) != 0: + pass + +class ServerSocket(threading.Thread): + def __init__(self, port=1034, maxqueue=5, **other): + threading.Thread.__init__(self, *other) + self.running = 1 + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.bind((socket.gethostname(), port)) + self.socket.listen(maxqueue) + self.clients = [] + + def _clean(self, client): + if not client.isAlive(): + return 0 + return 1 + + def close(self): + self.socket.close() + + def run(self): + while self.running: + sread, swrite, serror = select.select([self.socket],[self.socket],[self.socket],5) + if sread: + (clientsocket, address) = self.socket.accept() + ct = ClientSocket(clientsocket) + ct.start() + self.clients.append(ct) + + print len(self.clients) + self.clients = filter(self._clean, self.clients) + print len(self.clients) + self.socket.close() + [x.close() for x in self.clients] + [x.join() for x in self.clients] +def main(argv=None): + if argv is None: + argv = sys.argv + running = 1 -# TODO write the code + servsock = ServerSocket() + servsock.start() + + try: + while running: + # Maybe do stuff here? + pass + except KeyboardInterrupt: + running = 0 + + print "Just cleaning up stuff" + + servsock.running = 0 + + servsock.join() + + return 0 + +if __name__ == "__main__": + sys.exit(main()) + +# Python Indentation: +# ------------------- +# Use tabs not spaces. If you use vim, the following comment will +# configure it to use tabs. # +# vim:noet:ts=2 sw=2 ft=python |