#self.gotanotherline? #start new thread for calling virtual functions? import thread, socket, sys class sockstream: def __del__(self): self.stop = True def accepted(self, conn, ip, port): pass def failedconnect(self): pass def disconnected(self): pass def connected(self): pass def gotmoredata(self): pass def gotdata(self): pass def gotline(self): pass def disconnect(self): self.stop = True def sockthread(self): try: self.socket.settimeout(1.0) while not self.stop: try: a = self.socket.recv(10000) except socket.timeout: pass except: print sys.exc_type print sys.exc_value print sys.exc_traceback self.stop = True self.disconnected() break else: if len(self.sep)>1: c = (self.queue[1-len(self.sep):]+a).count(self.sep) else: c = a.count(self.sep) o = self.queue=="" self.queue += a if o: self.gotdata() self.gotmoredata() for x in xrange(c): self.gotline() self.socket.close() self.disconnected() except: print sys.exc_type print sys.exc_value print sys.exc_traceback def __init__(self, conn=None): self.queue = "" self.sep = "\r\n" self.socket = conn self.stop = False if conn: thread.start_new_thread(self.sockthread, ()) def connectthread(self, ip, port): try: self.socket.connect((ip, port)) except: self.failedconnect() else: self.connected() self.stop = False thread.start_new_thread(self.sockthread, ()) def acceptthread(self): try: while not self.stop: try: conn, address = self.socket.accept() except socket.timeout: continue except: print sys.exc_info() else: ip, port = address self.accepted(conn, ip, port) except: print sys.exc_type print sys.exc_value print sys.exc_traceback def listen(self, ip, port): self.socket = socket.socket() self.socket.bind((ip, port)) self.socket.listen(5) self.stop = False thread.start_new_thread(self.acceptthread, ()) def connect(self, ip, port): self.queue = "" self.socket = socket.socket() thread.start_new_thread(self.connectthread, (ip, port)) def read(self): a = self.queue self.queue = "" return a def peek(self): return self.queue def peekline(self): a = self.queue.find(self.sep) if a==-1: return None return self.queue[:a+len(self.sep)] def write(self, data): self.socket.sendall(data) def readline(self): a = self.queue.find(self.sep) if a==-1: return None b = self.queue[:a+len(self.sep)] self.queue = self.queue[a+len(self.sep):] return b