예제 #1
0
 def _handleConnection(self, sock):
     try:
         if sock is None:
             return
         csock, caddr = sock.accept()
         if Pyro4.config.COMMTIMEOUT:
             csock.settimeout(Pyro4.config.COMMTIMEOUT)
     except socket.error:
         x = sys.exc_info()[1]
         err = getattr(x, "errno", x.args[0])
         if err in socketutil.ERRNO_RETRIES:
             # just ignore this error for now and continue
             log.warning("accept() failed errno=%d, shouldn't happen", err)
             return None
         if err in socketutil.ERRNO_BADF or err in socketutil.ERRNO_ENOTSOCK:
             # our server socket got destroyed
             raise errors.ConnectionClosedError("server socket closed")
         raise
     try:
         conn = socketutil.SocketConnection(csock)
         if self.daemon._handshake(conn):
             return conn
     except:  # catch all errors, otherwise the event loop could terminate
         ex_t, ex_v, ex_tb = sys.exc_info()
         tb = util.formatTraceback(ex_t, ex_v, ex_tb)
         log.warning("error during connect/handshake: %s; %s", ex_v,
                     "\n".join(tb))
         try:
             csock.shutdown(socket.SHUT_RDWR)
         except (OSError, socket.error):
             pass
         csock.close()
     return None
예제 #2
0
 def _handleConnection(self, sock):
     try:
         if sock is None:
             return
         csock, caddr = sock.accept()
         if Pyro4.config.COMMTIMEOUT:
             csock.settimeout(Pyro4.config.COMMTIMEOUT)
     except socket.error:
         x = sys.exc_info()[1]
         err = getattr(x, "errno", x.args[0])
         if err in socketutil.ERRNO_RETRIES:
             # just ignore this error for now and continue
             log.warn("accept() failed errno=%d, shouldn't happen", err)
             return None
         if err in socketutil.ERRNO_BADF or err in socketutil.ERRNO_ENOTSOCK:
             # our server socket got destroyed
             raise errors.ConnectionClosedError("server socket closed")
         raise
     try:
         conn = socketutil.SocketConnection(csock)
         if self.daemon._handshake(conn):
             return conn
     except (socket.error, errors.PyroError):
         x = sys.exc_info()[1]
         log.warn("error during connect: %s", x)
         csock.close()
     return None
 def _handleConnection(self, sock):
     try:
         if sock is None:
             return
         csock, caddr = sock.accept()
         if hasattr(csock, "getpeercert"):
             log.debug("connected %s - SSL", caddr)
         else:
             log.debug("connected %s - unencrypted", caddr)
         if config.COMMTIMEOUT:
             csock.settimeout(config.COMMTIMEOUT)
     except (socket.error, OSError) as x:
         err = getattr(x, "errno", x.args[0])
         if err in socketutil.ERRNO_BADF or err in socketutil.ERRNO_ENOTSOCK:
             # our server socket got destroyed
             raise errors.ConnectionClosedError("server socket closed")
         # socket errors may not lead to a server abort, so we log it and continue
         err = getattr(x, "errno", x.args[0])
         log.warning("accept() failed '%s' with errno=%d, shouldn't happen", x, err)
         return None
     try:
         conn = socketutil.SocketConnection(csock)
         if self.daemon._handshake(conn):
             return conn
         conn.close()
     except:  # catch all errors, otherwise the event loop could terminate
         ex_t, ex_v, ex_tb = sys.exc_info()
         tb = util.formatTraceback(ex_t, ex_v, ex_tb)
         log.warning("error during connect/handshake: %s; %s", ex_v, "\n".join(tb))
         try:
             csock.shutdown(socket.SHUT_RDWR)
         except (OSError, socket.error):
             pass
         csock.close()
     return None
예제 #4
0
 def _pyroReconnect(self, tries=100000000):
     """(re)connect the proxy to the daemon containing the pyro object which the proxy is for"""
     self._pyroRelease()
     while tries:
         try:
             self.__pyroCreateConnection()
             return
         except errors.CommunicationError:
             tries -= 1
             if tries:
                 time.sleep(2)
     msg = "failed to reconnect"
     log.error(msg)
     raise errors.ConnectionClosedError(msg)
예제 #5
0
 def recv(self, datasize):
     chunk = self.received[:datasize]
     self.received = self.received[datasize:]
     if len(chunk) < datasize:
         raise errors.ConnectionClosedError("receiving: not enough data")
     return chunk