17) Come chiama il client la procedura remota sul server?

Una volta che il client ha creato il gestore di trasporto si raggiunge un'entità del tipo {n_prog, n_vers, protocollo} tramite il numero di porta relativo. La procedura di dispatching è già selezionata, e la clnt_call() specifica solo il gestore di trasporto e l’identificazione della procedura.

La struttura della clnt_call è:

enum clnt_stat clnt_call(clnt, procnum,inproc,in,outproc,out,tout)

CLIENT *clnt; /*gestore di trasporto locale, ottenuto con una clntXXX_create*/

u_long procnum; /*identificazione(numero)procedura remota*/

xdrproc_t inproc; /* routine XDR */

char *in; /*argomenti della procedura*/

xdrproc_t outproc; /* routine XDR */

char *out; /*risultato*/

struct timeval tout; /*valore del timeout per l’attesa risposta*/

per quanto riguarda il valore del timeout:

Analisi degli eventuali errori: il risultato di clnt_call() è analizzato con clnt_perror(), che stampa sullo standard error una stringa contenente un messaggio di errore:

void clnt_perror(clnt,s)

CLIENT * clnt; /*gestore di trasporto*/

char * s; /*stringa di output*/

Distruzione del gestore di trasporto del client: la primitiva clnt_destroy() dealloca lo spazio associato al gestore CLIENT, senza chiudere la socket, quindi ne consegue che più gestori possono condividere una stessa socket:

void clnt_destroy (clnt)

CLIENT *clnt;

 


Back
Index
Next