code: protected void handleTCPSrvRqst(SrvRqst srvRqst, Socket socket)
      {
          // Match scopes
          if (!getScopes().weakMatch(srvRqst.getScopes()))
          {
              if (logger.isLoggable(Level.FINE))
                  logger.fine("ServiceAgent server " + this + " dropping message " + srvRqst + ": no scopes match among agent scopes " + getScopes() + " and message scopes " + srvRqst.getScopes());
              return;
          }
  
          List<ServiceInfo> matchingServices = matchServices(srvRqst.getServiceType(), srvRqst.getLanguage(), srvRqst.getScopes(), srvRqst.getFilter());
          if (logger.isLoggable(Level.FINE))
              logger.fine("ServiceAgent server " + this + " returning " + matchingServices.size() + " services of type " + srvRqst.getServiceType());
          tcpSrvRply.perform(socket, srvRqst, matchingServices);
      }
docs: Handles a unicast TCP SrvRqst message arrived to this service agent.
  <br />
  This service agent will reply with a list of matching services.
  
  @param srvRqst the SrvRqst message to handle
  @param socket the socket connected to the client where to write the reply