def next(self):
        '''receive next data (block until next data)'''
        try:
            raw_msg = self._socket.recv()
        except KeyboardInterrupt:
            raise StopIteration()
        msg, topic_name = self._strip_topic_name_if_not_wildcard(raw_msg)
        if msg is None:
            return self.next()
        if self._user_callback_takes_topic_name:
            return (self.deserialize(msg), topic_name)
        else:
            return self.deserialize(msg)