code: def _recv_return(self, method_frame):
          '''
          Handle basic.return method. If we have a complete message, will call the
          user's return listener callabck (if any). If there are not enough
          frames, will re-queue current frames and raise a FrameUnderflow
  
          NOTE: if the channel was in confirmation mode when the message was
          published, then this will still be followed by basic.ack later
          '''
          msg = self._read_returned_msg(method_frame)
  
          if callable(self._return_listener):
              self._return_listener(msg)
          else:
              self.logger.error(
                  "Published message returned by broker: info=%s, properties=%s",
                  msg.return_info, msg.propertiesf _recv_return(self, method_frame):
          '''
          Handle basic.return method. If we have a complete message, will call the
          user's return listener callabck (if any). If there are not enough
          frames, will re-queue current frames and raise a FrameUnderflow
  
          NOTE: if the channel was in confirmation mode when the message was
          published, then this will still be followed by basic.ack later
          '''
          msg = self._read_returned_msg(method_frame)
  
          if callable(self._return_listener):
              self._return_listener(msg)
          else:
              self.logger.error(
                  "Published message returned by broker: info=%s, properties=%s",
                  msg.return_info, msg.properties)
docs: Handle basic.return method. If we have a complete message, will call the
          user's return listener callabck (if any). If there are not enough
          frames, will re-queue current frames and raise a FrameUnderflow
  
          NOTE: if the channel was in confirmation mode when the message was
          published, then this will still be followed by basic.ack later