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)
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 _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
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
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))
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))
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)
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 _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)
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)
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)
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