Knifflige Frage zu Remote Procedure Calls



  • Hi Leute, habe da ein schwerwiegendes Problem:

    Habe ein RemoteProcedure Programm geschrieben:

    Hier der relevante client:

    main(int argc, char **argv)
    {
    	int i;
      	register CLIENT *cl;	/* Client Handle */
      	prime_result *result;	/* Pointer to result Paket */
      	prime_request request;	/* request Paket */
    
      	if (argc == 4)
      	{
    
    		cl = clnt_create(argv[1], (unsigned int)PRIMEPROG, (unsigned int)PRIMEVERS,"udp");
    
    		if (cl == NULL)
    		{
    			printf("test\n");
    			clnt_pcreateerror(argv[1]); 
    			exit(2); 
    		};
    
    		request.min = atoi(argv[2]); 
    		request.max = atoi(argv[3]);
    
      		result = find_primes_1(&request, cl); /* remote procedure aufrufen */
    
      		for(i=0; i< result->length; i++)
    			printf("%d ist Primzahl\n", result->array[i]);
    
      		xdr_free((xdrproc_t)xdr_prime_result, (char*)result); /* Freigeben des Result-Arrays */
    
    		clnt_destroy(cl); 
    	}
    	else
    		printf("USAGE: client [SERVER] [MIN][MAX]\n");	
    }
    

    Es klappt alles wunderbar, sogar über Rechnergrenzen hinaus.
    Nun habe ich aber ein Problem mit dem setzen des Timeouts!!

    Wenn ich zum Beispiel den client auf www.google.de ansetze, dann
    kommt erst nach über 60 Sekunden ein Abbruch mit Fehlermeldung timeout!
    Timouts kann aber nach den Manuells angeblich verändern.

    mit clnt_control(..) und/oder direct im Client-Stub bei clnt_call(...)

    Habe dies alles schon Probiert, aber das reale Timeout stört sich nicht im geringsten an diesen Einstellungen. Kann es sein, dass das Timeout sich nicht
    auf die anfängliche Verbindung mit dem Server bezieht, sondern tritt erst in Kraft, wenn eine Verbindung aufgebaut ist ? Weil der Stub wird ja erst
    nach clnt_create() aufgerufen, wobei dessen Zeitsetzung in clnt_call(..) schonmal irrelevant wäre. Hat jemand von euch Erfahrung in RPC-Programmierung
    und weiss, wie man dieses blöde Timeout verhindern kann ?? Suche schon seit Tagen, aber finde nicht die wirkliche Funktion/Idee um das Timeout zu umgehen und direkt/schnell eine Fehlermeldung auszugeben.

    Vielen Dank im vorraus 🙂

    Gruss

    Finalbrain


Anmelden zum Antworten