Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

from twisted.internet import reactor, error 

 

def listen_tcp(portrange, host, factory): 

    """Like reactor.listenTCP but tries different ports in a range.""" 

    assert len(portrange) <= 2, "invalid portrange: %s" % portrange 

7    if not hasattr(portrange, '__iter__'): 

        return reactor.listenTCP(portrange, factory, interface=host) 

9    if not portrange: 

        return reactor.listenTCP(0, factory, interface=host) 

11    if len(portrange) == 1: 

        return reactor.listenTCP(portrange[0], factory, interface=host) 

exit    for x in range(portrange[0], portrange[1]+1): 

        try: 

            return reactor.listenTCP(x, factory, interface=host) 

        except error.CannotListenError: 

            if x == portrange[1]: 

                raise 

 

 

class CallLaterOnce(object): 

    """Schedule a function to be called in the next reactor loop, but only if 

    it hasn't been already scheduled since the last time it run. 

    """ 

 

    def __init__(self, func, *a, **kw): 

        self._func = func 

        self._a = a 

        self._kw = kw 

        self._call = None 

 

    def schedule(self, delay=0): 

        if self._call is None: 

            self._call = reactor.callLater(delay, self) 

 

    def cancel(self): 

37        if self._call: 

            self._call.cancel() 

 

    def __call__(self): 

        self._call = None 

        return self._func(*self._a, **self._kw)