code: def select_read(self, timeout=None):
          
  
          # If we have buffered data, we consider a read possible
          if len(self._decrypted_bytes) > 0:
              return True
  
          read_ready, _, _ = select.select([self._socket], [], [], timeout)
          return len(read_ready) > 0
docs: Blocks until the socket is ready to be read from, or the timeout is hit
  
          :param timeout:
              A float - the period of time to wait for data to be read. None for
              no time limit.
  
          :return:
              A boolean - if data is ready to be read. Will only be False if
              timeout is not None.