コード例 #1
0
ファイル: transport.py プロジェクト: aviroop1/SuperGLU
 def receive(self):
     try:
         return self.socket.recv(1024)
     except socket.error:
         _, e, _ = sys.exc_info()
         if get_errno(e) in (errno.EAGAIN, errno.EINTR):
             log.debug("socket read interrupted, restarting")
             raise exception.InterruptedException()
         raise
コード例 #2
0
ファイル: transport.py プロジェクト: Anthchirp/stomp.py
 def receive(self):
     try:
         return self.socket.recv(1024)
     except socket.error:
         _, e, _ = sys.exc_info()
         if get_errno(e) in (errno.EAGAIN, errno.EINTR):
             log.debug("socket read interrupted, restarting")
             raise exception.InterruptedException()
         raise
コード例 #3
0
ファイル: transport.py プロジェクト: rubhatt/stomp.py
 def receive(self):
     """
     :rtype: bytes
     """
     try:
         return self.socket.recv(self.__recv_bytes)
     except socket.error:
         _, e, _ = sys.exc_info()
         if get_errno(e) in (errno.EAGAIN, errno.EINTR):
             log.debug("socket read interrupted, restarting")
             raise exception.InterruptedException()
         if self.is_connected():
             raise
コード例 #4
0
ファイル: transport.py プロジェクト: jasonrbriggs/stomp.py
 def receive(self):
     """
     :rtype: bytes
     """
     try:
         return self.socket.recv(self.__recv_bytes)
     except socket.error:
         _, e, _ = sys.exc_info()
         if get_errno(e) in (errno.EAGAIN, errno.EINTR):
             log.debug("socket read interrupted, restarting")
             raise exception.InterruptedException()
         if self.is_connected():
             raise
コード例 #5
0
ファイル: transport.py プロジェクト: Redferne/stomp.py
    def disconnect_socket(self):
        """
        Disconnect the underlying socket connection
        """
        self.running = False
        log.error("Disconnect_socket!")
        if self.socket is not None:
            if self.__need_ssl():
                #
                # Even though we don't want to use the socket, unwrap is the only API method which does a proper SSL
                # shutdown
                #
                try:
                    self.socket = self.socket.unwrap()
                except Exception:
                    #
                    # unwrap seems flaky on Win with the back-ported ssl mod, so catch any exception and log it
                    #
                    _, e, _ = sys.exc_info()
                    log.warning(e)
            elif hasattr(socket, 'SHUT_RDWR'):
                try:
                    self.socket.shutdown(socket.SHUT_RDWR)
                except socket.error:
                    _, e, _ = sys.exc_info()
                    # ignore when socket already closed
                    if get_errno(e) != errno.ENOTCONN:
                        log.warning(
                            "Unable to issue SHUT_RDWR on socket because of error '%s'",
                            e)

        #
        # split this into a separate check, because sometimes the socket is nulled between shutdown and this call
        #
        if self.socket is not None:
            try:
                self.socket.close()
            except socket.error:
                _, e, _ = sys.exc_info()
                log.warning("Unable to close socket because of error '%s'", e)
        self.current_host_and_port = None
        self.socket = None
        self.notify('disconnected')
コード例 #6
0
ファイル: transport.py プロジェクト: jasonrbriggs/stomp.py
    def disconnect_socket(self):
        """
        Disconnect the underlying socket connection
        """
        self.running = False
        if self.socket is not None:
            if self.__need_ssl():
                #
                # Even though we don't want to use the socket, unwrap is the only API method which does a proper SSL
                # shutdown
                #
                try:
                    self.socket = self.socket.unwrap()
                except Exception:
                    #
                    # unwrap seems flaky on Win with the back-ported ssl mod, so catch any exception and log it
                    #
                    _, e, _ = sys.exc_info()
                    log.warning(e)
            elif hasattr(socket, 'SHUT_RDWR'):
                try:
                    self.socket.shutdown(socket.SHUT_RDWR)
                except socket.error:
                    _, e, _ = sys.exc_info()
                    # ignore when socket already closed
                    if get_errno(e) != errno.ENOTCONN:
                        log.warning("Unable to issue SHUT_RDWR on socket because of error '%s'", e)

        #
        # split this into a separate check, because sometimes the socket is nulled between shutdown and this call
        #
        if self.socket is not None:
            try:
                self.socket.close()
            except socket.error:
                _, e, _ = sys.exc_info()
                log.warning("Unable to close socket because of error '%s'", e)
        self.current_host_and_port = None
        self.socket = None
        self.notify('disconnected')
コード例 #7
0
ファイル: transport.py プロジェクト: cg2v/stomp.py
    def __read(self):
        """
        Read the next frame(s) from the socket.
        """
        fastbuf = StringIO()
        while self.running:
            try:
                try:
                    c = self.read_from_socket()
                except socket.error:
                    _, e, _ = sys.exc_info()
                    if get_errno(e) in (errno.EAGAIN, errno.EINTR):
                        log.debug("socket read interrupted, restarting")
                        continue
                    raise
                c = decode(c)
            except Exception:
                _, e, _ = sys.exc_info()
                c = ''
            if len(c) == 0:
                raise exception.ConnectionClosedException()
            fastbuf.write(c)
            if '\x00' in c:
                break
            elif c == '\x0a':
                # heartbeat (special case)
                return c
        self.__recvbuf += fastbuf.getvalue()
        fastbuf.close()
        result = []

        if len(self.__recvbuf) > 0 and self.running:
            while True:
                pos = self.__recvbuf.find('\x00')

                if pos >= 0:
                    frame = self.__recvbuf[0:pos]
                    preamble_end = frame.find('\n\n')
                    if preamble_end >= 0:
                        content_length_match = Transport.__content_length_re.search(frame[0:preamble_end])
                        if content_length_match:
                            content_length = int(content_length_match.group('value'))
                            content_offset = preamble_end + 2
                            frame_size = content_offset + content_length
                            if frame_size > len(frame):
                                #
                                # Frame contains NUL bytes, need to read more
                                #
                                if frame_size < len(self.__recvbuf):
                                    pos = frame_size
                                    frame = self.__recvbuf[0:pos]
                                else:
                                    #
                                    # Haven't read enough data yet, exit loop and wait for more to arrive
                                    #
                                    break
                    result.append(frame)
                    self.__recvbuf = self.__recvbuf[pos+1:]
                else:
                    break
        return result