La procedura di dispatching contiene i riferimenti alle implementazioni dei servizi di un programma RPC. Tali servizi sono stati inseriti tramite la funzione di registrazione svc_register. Tale primitiva associa ad una procedura di dispatching una tripla {n_prog,n_vers,protocollo}. La sua struttura è la seguente:
bool_t
svc_register (xprt, prognum, versnum,dispatch, protocol)
SVCXPRT *xprt; /* gestore di trasporto */
u_long prognum,versnum; /*identificazione della procedura*/
char (*dispatch)(); /*puntatore alla procedura di dispatching*/
u_long protocol; /*tipo di protocollo*/
Qui non ci sono indicazioni di tipi XDR, bensì solo all'interno dell'implementazione di ogni servizio (vedi oltre)
Essa seleziona il servizio da eseguire interpretando il messaggio RPC consegnato dal gestore
La sua struttura è la seguente:
void dispatch (request, xprt)
struct svc_req *request;
SVCXPRT *xprt;
struct svc_req {
u_long rq_prog; /* numero di programma */
u_long rq_vers; /* versione */
u_long rq_proc; /* servizio richiesto */
struct opaque_auth rq_cred; /* credenziali */
caddr_t rq_clntcred; /* credenziali di sola lettura */
SVCXPRT * rq_xprt;}; /* gestore associato */
rq_proc identifica il servizio da svolgere. I parametri per l'esecuzione del servzio sono ricavati dalla svc_getargs() e la risposta è rispedita tramite la svc_sendreply() del gestore di trasporto del protocollo RPC
. La chiamata di tali funzioni è:
bool_t svc_getargs(xprt,inproc,in)
SVCXPRT *xprt;
xdrproc_t inproc;
char *in;
bool_t svc_sendreply(xprt,outproc,out)
SVCXPRT *xprt;
xdrproc_t outproc;
char *out;
inproc ed outproc sono funzioni di formato XDR per argomenti e risultati, quindi I valori di output (getargs) e di input (sendreply) sono già trasformati in formato locale.