code: @Override
      public void run()
      {
          try
          {
              if (version < MessagingService.VERSION_20)
                  throw new UnsupportedOperationException(String.format("Unable to read obsolete message version %s; "
                                                                        + "The earliest version supported is 2.0.0",
                                                                        version));
  
              receiveMessages();
          }
          catch (EOFException e)
          {
              logger.trace("eof reading from socket; closing", e);
              // connection will be reset so no need to throw an exception.
          }
          catch (UnknownColumnFamilyException e)
          {
              logger.warn("UnknownColumnFamilyException reading from socket; closing", e);
          }
          catch (IOException e)
          {
              logger.debug("IOException reading from socket; closing", e);
          }
          finally
          {
              close();
          }
      }
docs: A new connection will either stream or message for its entire lifetime: because streaming
  bypasses the InputStream implementations to use sendFile, we cannot begin buffering until
  we've determined the type of the connection.