Changeset 178


Ignore:
Timestamp:
07/25/12 21:40:03 (12 years ago)
Author:
atzm
Message:
  • fix error handling
File:
1 edited

Legend:

Unmodified
Added
Removed
  • etherws/trunk/etherws.py

    r177 r178  
    201201    READ_SIZE = 65535 
    202202 
    203     def __init__(self, switch, dev, debug=False): 
     203    def __init__(self, ioloop, switch, dev, debug=False): 
     204        self._ioloop = ioloop 
    204205        self._switch = switch 
    205206        self._dev = dev 
     
    217218        self._tap.up() 
    218219        self._switch.register_port(self) 
     220        self._ioloop.add_handler(self.fileno(), self, self._ioloop.READ) 
    219221 
    220222    def close(self): 
    221223        if self.closed: 
    222224            raise ValueError('I/O operation on closed tap') 
     225        self._ioloop.remove_handler(self.fileno()) 
    223226        self._switch.unregister_port(self) 
    224227        self._tap.close() 
     
    241244        except: 
    242245            traceback.print_exc() 
    243         tornado.ioloop.IOLoop.instance().stop()  # XXX: should unregister fd 
     246        self.close() 
    244247 
    245248    def _read(self): 
     
    273276 
    274277class EtherWebSocketClient(DebugMixIn): 
    275     def __init__(self, switch, url, cred=None, debug=False): 
     278    def __init__(self, ioloop, switch, url, cred=None, debug=False): 
     279        self._ioloop = ioloop 
    276280        self._switch = switch 
    277281        self._url = url 
     
    295299        self._sock.connect(self._url, **self._options) 
    296300        self._switch.register_port(self) 
     301        self._ioloop.add_handler(self.fileno(), self, self._ioloop.READ) 
    297302        self.dprintf('connected: %s\n', lambda: self._url) 
    298303 
     
    300305        if self.closed: 
    301306            raise websocket.WebSocketException('already closed') 
     307        self._ioloop.remove_handler(self.fileno()) 
    302308        self._switch.unregister_port(self) 
    303309        self._sock.close() 
     
    327333        except: 
    328334            traceback.print_exc() 
    329         tornado.ioloop.IOLoop.instance().stop()  # XXX: should unregister fd 
     335        self.close() 
    330336 
    331337 
     
    470476 
    471477    for dev in args.device: 
    472         tap = TapHandler(switch, dev, debug=args.debug) 
     478        tap = TapHandler(ioloop, switch, dev, debug=args.debug) 
    473479        tap.open() 
    474         ioloop.add_handler(tap.fileno(), tap, ioloop.READ) 
    475480 
    476481    if not args.foreground: 
     
    506511 
    507512    for uri in args.uri: 
    508         client = EtherWebSocketClient(switch, uri, cred, args.debug) 
     513        client = EtherWebSocketClient(ioloop, switch, uri, cred, args.debug) 
    509514        client.open() 
    510         ioloop.add_handler(client.fileno(), client, ioloop.READ) 
    511515 
    512516    for dev in args.device: 
    513         tap = TapHandler(switch, dev, debug=args.debug) 
     517        tap = TapHandler(ioloop, switch, dev, debug=args.debug) 
    514518        tap.open() 
    515         ioloop.add_handler(tap.fileno(), tap, ioloop.READ) 
    516519 
    517520    if not args.foreground: 
Note: See TracChangeset for help on using the changeset viewer.