def accept(self):
        """ Copied from rpyc server.py
        Modified to shutdown server when socket times out and reset
        socket timer when client connects
        """

        while self.active:
            try:
                sock, addrinfo = self.listener.accept()
                # set/reset timeout after client connects
                self.listener.settimeout(self.listener_timeout)
            except socket.timeout:
                self.close()
            except socket.error:
                ex = sys.exc_info()[1]
                if get_exc_errno(ex) in (errno.EINTR, errno.EAGAIN):
                    pass
                else:
                    raise EOFError()
            else:
                break

        sock.setblocking(True)
        self.logger.info("accepted %s with fd %s", addrinfo, sock.fileno())
        self.clients.add(sock)
        self._accept_method(sock)
示例#2
0
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while True:
            try:
                sock, addrinfo = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if hasattr(ex, "errno"):
                    if get_exc_errno(ex) == errno.EINTR:
                        pass
                    else:
                        raise EOFError()
                elif ex[0] == errno.EINTR:
                    pass
                else:
                    raise EOFError()
            else:
                break

        sock.setblocking(True)
        self.logger.info("accepted %s:%s", addrinfo[0], addrinfo[1])
        self.clients.add(sock)
        self._accept_method(sock)
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while True:
            try:
                sock, addrinfo = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if hasattr(ex, "errno"):
                    if get_exc_errno(ex) == errno.EINTR:
                        pass
                    else:
                        raise EOFError()
                elif ex[0] == errno.EINTR:
                    pass
                else:
                    raise EOFError()
            else:
                break

        sock.setblocking(True)
        self.logger.info("accepted %s:%s", addrinfo[0], addrinfo[1])
        self.clients.add(sock)
        self._accept_method(sock)
示例#4
0
 def _poll_read(self, timeout=None):
     if not self.client_side:
         return self.upstream.wait(timeout)
     self.sock.settimeout(timeout)
     try:
         buf, addr = self.sock.recvfrom(self.MAX_IO_CHUNK)
     except socket.timeout:
         self.total_timeout += timeout
         if self.total_timeout > 300:
             self.sock.close(
             )  # too much inactivity, disconnect to let it reconnect
         return False
     except socket.error:
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
             # windows just has to be a b**ch
             return True
         self.close()
         raise EOFError(ex)
     if not buf:
         self.close()
         raise EOFError("connection closed by peer")
     self.buf_in.write(BYTES_LITERAL(buf))
     self.total_timeout = 0
     return True
示例#5
0
 def fileno(self):
     try:
         return self.sock.fileno()
     except socket.error:
         self.close()
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) == errno.EBADF:
             raise EOFError()
         else:
             raise
示例#6
0
文件: stream.py 项目: vmalloc/rpyc
 def fileno(self):
     try:
         return self.sock.fileno()
     except socket.error:
         self.close()
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) == errno.EBADF:
             raise EOFError()
         else:
             raise
示例#7
0
文件: streams.py 项目: nask0/opparis
 def _read(self):
     try:
         buf = self.sock.recv(self.MAX_IO_CHUNK)
     except socket.timeout:
         return
     except socket.error:
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) in retry_errnos:
             # windows just has to be a bitch
             return
         self.close()
         raise EOFError(ex)
     if not buf:
         self.close()
         raise EOFError("connection closed by peer")
     self.buf_in.write(BYTES_LITERAL(buf))
示例#8
0
 def _read(self):
     try:
         buf = self.sock.recv(self.MAX_IO_CHUNK)
     except socket.timeout:
         return
     except socket.error:
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
             # windows just has to be a bitch
             return
         self.close()
         raise EOFError(ex)
     if not buf:
         self.close()
         raise EOFError("connection closed by peer")
     self.buf_in.write(BYTES_LITERAL(buf))
 def _read(self):
     try:
         buf = self.sock.recv(self.MAX_IO_CHUNK)
     except socket.timeout:
         return
     except socket.error:
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
             # windows just has to be a b**ch
             # edit: some politeness please ;)
             return
         self.close()
         raise EOFError(ex)
     if not buf:
         self.close()
         raise EOFError("connection closed by peer")
     self.buf_in.write(BYTES_LITERAL(buf))
示例#10
0
文件: stream.py 项目: vmalloc/rpyc
 def read(self, count):
     data = []
     while count > 0:
         try:
             buf = self.sock.recv(min(self.MAX_IO_CHUNK, count))
         except socket.timeout:
             continue
         except socket.error:
             ex = sys.exc_info()[1]
             if get_exc_errno(ex) in retry_errnos:
                 # windows just has to be a bitch
                 continue
             self.close()
             raise EOFError(ex)
         if not buf:
             self.close()
             raise EOFError("connection closed by peer")
         data.append(buf)
         count -= len(buf)
     return BYTES_LITERAL("").join(data)
示例#11
0
 def read(self, count):
     data = []
     while count > 0:
         try:
             buf = self.sock.recv(min(self.MAX_IO_CHUNK, count))
         except socket.timeout:
             continue
         except socket.error:
             ex = sys.exc_info()[1]
             if get_exc_errno(ex) in retry_errnos:
                 # windows just has to be a bitch
                 continue
             self.close()
             raise EOFError(ex)
         if not buf:
             self.close()
             raise EOFError("connection closed by peer")
         data.append(buf)
         count -= len(buf)
     return BYTES_LITERAL("").join(data)
示例#12
0
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while self.active:
            try:
                sock, _ = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if get_exc_errno(ex) == errno.EINTR:
                    pass
                else:
                    raise EOFError()
            else:
                break

        if not self.active:
            return

        sock.setblocking(True)
        self.clients.add(sock)
        self._accept_method(sock)
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while self.active:
            try:
                sock, _ = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if get_exc_errno(ex) == errno.EINTR:
                    pass
                else:
                    raise EOFError()
            else:
                break

        if not self.active:
            return

        sock.setblocking(True)
        self.clients.add(sock)
        self._accept_method(sock)
示例#14
0
    def _read(self):
        try:
            buf = self.sock.recv(self.MAX_IO_CHUNK)
            if __debug__:
                logger.debug('stream: read={}'.format(len(buf) if buf else None))

        except socket.timeout:
            return

        except socket.error:
            ex = sys.exc_info()[1]
            if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
                # windows just has to be a b**ch
                # edit: some politeness please ;)
                return
            self.close()
            raise EOFError(ex)

        if not buf:
            self.close()
            raise EOFError("connection closed by peer")

        self.buf_in.write(buf)
示例#15
0
文件: server.py 项目: wacquser/rpyc
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while self.active:
            try:
                sock, addrinfo = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if get_exc_errno(ex) in (errno.EINTR, errno.EAGAIN):
                    pass
                else:
                    raise EOFError()
            else:
                break

        if not self.active:
            return

        sock.setblocking(True)
        self.logger.info("accepted %s with fd %s", addrinfo, sock.fileno())
        self.clients.add(sock)
        self._accept_method(sock)
示例#16
0
文件: server.py 项目: C4rt/rpyc
    def accept(self):
        """accepts an incoming socket connection (blocking)"""
        while self.active:
            try:
                sock, addrinfo = self.listener.accept()
            except socket.timeout:
                pass
            except socket.error:
                ex = sys.exc_info()[1]
                if get_exc_errno(ex) in (errno.EINTR, errno.EAGAIN):
                    pass
                else:
                    raise EOFError()
            else:
                break

        if not self.active:
            return

        sock.setblocking(True)
        self.logger.info("accepted %s:%s", addrinfo[0], addrinfo[1])
        self.clients.add(sock)
        self._accept_method(sock)
示例#17
0
 def _poll_read(self, timeout=None):
     if not self.client_side:
         return self.upstream.wait(timeout)
     self.sock.settimeout(timeout)
     try:
         buf, addr=self.sock.recvfrom(self.MAX_IO_CHUNK)
     except socket.timeout:
         self.total_timeout+=timeout
         if self.total_timeout>300:
             self.sock.close() # too much inactivity, disconnect to let it reconnect
         return False
     except socket.error:
         ex = sys.exc_info()[1]
         if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
             # windows just has to be a bitch
             return True
         self.close()
         raise EOFError(ex)
     if not buf:
         self.close()
         raise EOFError("connection closed by peer")
     self.buf_in.write(BYTES_LITERAL(buf))
     self.total_timeout=0
     return True