Commit f0053c51 authored by Antoine Millet's avatar Antoine Millet
Browse files

Now process only one new connection by loop iteration, added tcp_backlog option.

parent 8e6b971f
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ class RpcServer(object):
    Base class for all RpcServer classes.
    '''

    DEFAULT_TCP_BACKLOG = 30
    NONBLOCKING_ERRORS = (errno.EAGAIN, errno.EWOULDBLOCK)

    def __init__(self, sock, loop=None, conn_args=(), conn_kw={}):
@@ -36,12 +37,14 @@ class RpcServer(object):
        self._sock_watcher.start()

    @classmethod
    def from_addr(cls, addr, port, *args, **kwargs):
    def from_addr(cls, addr, port, tcp_backlog=None, *args, **kwargs):
        sock = socket.socket()
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind((addr, port))
        sock.setblocking(False)
        sock.listen(5)
        if tcp_backlog is None:
            tcp_backlog = RpcServer.DEFAULT_TCP_BACKLOG
        sock.listen(tcp_backlog)
        return cls(sock, *args, **kwargs)

    def _wrap(self, sock):
@@ -51,12 +54,11 @@ class RpcServer(object):
        return RpcConnection(sock, self.loop, *self._conn_args, **self._conn_kw)

    def _handle(self, watcher, revents):
        while True:
            try:
                sock, address = self._sock.accept()
            except socket.error as err:
                if err.errno in self.NONBLOCKING_ERRORS:
                    break
                    return
                else:
                    raise #FIXME

@@ -99,7 +101,7 @@ class RpcServer(object):
        '''
        if conn in self._clients:
            if shutdown:
                conn.shutdown()
                conn().shutdown()

    def run(self):
        '''