Changeset 49:6ce0aee574f5 in livinglogic.python.tipimaid

Show
Ignore:
Timestamp:
12/22/08 16:40:04 (10 years ago)
Author:
Nikolas Tautenhahn <nik@…>
Branch:
default
Message:

proper handling of lost connections

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • liaalh_sender.py

    r48 r49  
    1 import sys, socket, select, signal 
     1import sys, socket, select, signal, datetime 
    22 
    33def intify(s, defaultint=0): 
     
    1313        self.backupport = backupport 
    1414        self.stream = stream 
     15        self.check_every = datetime.timedelta(seconds=10) 
    1516        self.s = None 
    1617        self.create_socket() 
     18        self.last_check_connection = datetime.datetime.now() 
    1719        signal.signal(signal.SIGALRM, self.timeout) 
    1820 
     
    5052        raise socket.timeout 
    5153 
     54    def send_socket(self, line): 
     55        (l, t) = (len(line), 0) 
     56        while t < l: # it might be that only a part of line gets transmitted 
     57            t += self.s.send(line[t:]) 
     58            signal.alarm(5) # wait 5 seconds for server to notify us that it got the message 
     59            try: 
     60                if self.s.recv(1024) == "": 
     61                    raise socket.timeout 
     62            except (socket.timeout, socket.error), exc: 
     63                print "Could not send", line # Handle error 
     64                self.s.close() 
     65                self.s = None 
     66                self.last_check_connection = datetime.datetime.now() 
     67            signal.alarm(0) 
     68 
     69    def send_tempfile(self, line): 
     70        print "Writing ", line 
     71        td = datetime.datetime.now() - self.last_check_connection 
     72        if td > self.check_every: 
     73            print "Checking..." 
     74            self.create_socket() 
     75            self.last_check_connection = datetime.datetime.now() 
     76            if self.s: 
     77                print "We have a new connection!" 
     78 
    5279    def send(self): 
     80        for line in self.readlines(): 
     81            if self.s: 
     82                self.send_socket(line) 
     83            else: 
     84                self.send_tempfile(line) 
    5385        if self.s: 
    54             for line in self.readlines(): 
    55                 (l, t) = (len(line), 0) 
    56                 while t < l: 
    57                     t += self.s.send(line[t:]) 
    58                     signal.alarm(5) # wait 5 seconds for server to notify us that it got the message 
    59                     try: 
    60                         self.s.recv(1024) 
    61                     except socket.timeout, exc: 
    62                         print "Could not send", line # Handle error 
    63                     signal.alarm(0) 
    64             s.close() 
     86            self.s.close() 
    6587 
    6688def main(args=None): 
  • liaalh_server.py

    r48 r49  
    4141                del inputs[s] 
    4242                input.remove(s) # TODO: make sure that we don't create index errors here 
     43                continue 
    4344            if data: 
    4445                s.send("1") # notify the sender that we got something DISABLE THIS IF WE USE NETCAT AS SENDER!