Changeset 192

Show
Ignore:
Timestamp:
06/24/02 11:55:12 (6 years ago)
Author:
sholloway
Message:

Added some new events for socket errors

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/Client.py

    r173 r192  
    116116        return self.__super._SocketSend(data) 
    117117 
     118    def _SetSocketError(self, exc_class, exc_info, exc_traceback): 
     119        self.stream.UpdateObservers(socket_error=(exc_class, exc_info)) 
     120        del exc_class 
     121        del exc_info 
     122        del exc_traceback 
     123 
    118124    def _NeedsRead(self, *args, **kw): 
    119125        """Overrides SmartSelect mechanism to signal stream processtick events.""" 
  • trunk/RBJabber/RBJabber/JabberConnection.py

    r164 r192  
    5252from Foundation.WeakBind import BindCallable 
    5353import JID 
     54import sys 
    5455import socket 
    5556import select 
     
    116117        # Create our socket 
    117118        self._sendData = '' 
    118         self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    119         params = JID.reJabberURL.split(JabberServerURL)[1:-1] 
    120         self._socket.connect((params[0], port)) 
     119        try: 
     120            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     121            params = JID.reJabberURL.split(JabberServerURL)[1:-1] 
     122            self._socket.connect((params[0], port)) 
     123        except socket.error: 
     124            self._SetSocketError(*sys.exc_info()) 
     125            raise 
    121126        self.fileno = self._socket.fileno 
    122127         
     
    132137        """Politely disconnects the socket and parser from the jabber stream""" 
    133138        if __debug__: print 'Disconnecting %s from %s' % (self.__class__.__name__, self.ServerJID) 
    134         self._SendXMLImmediate('%s' % _xmlJabberFooter) 
    135         if self._fileIn: print >> self._fileIn, '</stream:stream>' 
     139        if self._socket:  
     140            try: self._SendXMLImmediate('%s' % _xmlJabberFooter) 
     141            except socket.error: pass 
     142        if self._fileIn: print >> self._fileIn, _xmlJabberFooter 
    136143        self._socket = None 
    137144        self._parser = None 
     
    204211        XML data has been written to the socket.""" 
    205212        self._sendData += xml 
    206         while self._sendData and select.select([], [self._socket], []): 
     213        while self._sendData and select.select([], [self._socket], [], 0.5): 
    207214            nSent = self._SocketSend(self._sendData) 
    208215            if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
     
    210217 
    211218    def _SocketRecv(self, limit=8192): 
    212         return self._socket.recv(limit) 
     219        try: 
     220            return self._socket.recv(limit) 
     221        except socket.error: 
     222            self._SetSocketError(*sys.exc_info()) 
     223            raise 
    213224 
    214225    def _SocketSend(self, data): 
    215         return self._socket.send(data) 
     226        try: 
     227            return self._socket.send(data) 
     228        except socket.error: 
     229            self._SetSocketError(*sys.exc_info()) 
     230            raise 
     231 
     232    def _SetSocketError(self, exc_class, exc_info, exc_traceback): 
     233        del exc_class 
     234        del exc_info 
     235        del exc_traceback 
    216236 
    217237# Keep the super around for speed 
  • trunk/RBJabber/RBJabber/Test.py

    r164 r192  
    4141import SubscribeApproveResponse 
    4242import PresenceMap 
     43import sys,socket 
    4344 
    4445#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    7172        jc.Responses.append(SubscribeApproveResponse.SubscribeApproveResponse(jc)) 
    7273         
    73         while 1: jc.Process(0.5) 
     74        while 1:  
     75            jc.Process(0.5) 
    7476    except KeyboardInterrupt: 
    7577        jc.SendXML('''<presence type="unavailable" />''') 
     
    105107        strEval = ('{"%s"}'%strEval) 
    106108        dictLogin.update(eval(strEval, {}, {})) 
    107     _test(**dictLogin) 
    108109 
     110    import time 
     111    while 1: 
     112        try: 
     113            _test(**dictLogin) 
     114            break 
     115        except socket.error, info: 
     116            print "Socket Error:", info 
     117            time.sleep(5.0) 
     118            print "Attempting Reconnect..." 
     119        except KeyboardInterrupt: 
     120            break 
     121