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