10) Come funziona in dettaglio la registerrpc?
primitiva registerrpc:int registerrpc(n_prog,n_vers,n_proc,proc_name,inproc,outproc)
u_long n_prog,n_vers,n_proc; /*identificazione procedura*/
char *(*proc_name)() /*puntatore alla procedura da attivare*/
xdrproc_t inproc; /*funzione xdr per il tipo di argomento*/
xdrproc_t outproc; /*funzione xdr per il tipo di risultato*/
Viene eseguita dal server che la vuole rendere nota ed invocabile da clienti remoti. Una entry per ogni registrazione. Vengono quindi usati diversi processi servitori che contengono i servizi e rimangono in attesa.
Dopo la registrazione della procedura, il processo attende chiamate invocando la primitiva svc_run(), che non termina mai! (se termina è un errore).
Le procedure così registrate sono compatibili con chiamate realizzate da primitive basate su meccanismi di trasporto UDP senza connessione, ma incompatibili con TCP a stream.
La registerrpc restituisce successo ( =0) o -1 in caso di insuccesso .