NOMBRE¶
rpc - rutinas de biblioteca para llamadas a procedimientos remotos
SINOPSIS Y DESCRIPCIÓN¶
Estas rutinas permiten a los programas en C realizar llamadas a procedimientos
en otras máquinas a través de la red. Primero, el cliente llama a un
procedimiento para enviar un paquete de datos al servidor. A la llegada del
paquete, el servidor llama a una rutina de atención que realiza el
servicio solicitado, y a continuación envía de vuelta una respuesta.
Finalmente, la llamada al procedimiento termina y vuelve al cliente.
Las rutinas que se usan para RPC seguro (autenticación DES) se describen en
rpc_secure(3). RPC seguro sólo se puede usar si hay disponible
cifrado DES.
#include <rpc/rpc.h>
void
auth_destroy(auth)
AUTH *auth;
- Una macro que destruye la información de
autenticación asociada a auth. La destrucción usalmente
implica la liberación de estructuras de datos privadas. El uso de
auth es indefinido trás llamar a auth_destroy().
AUTH *
authnone_create()
- Crea y devuelve una asa (handle) de autenticación
RPC que pasa información de autenticación
inservible en cada llamada a procedimientos remotos. Esta es la
autenticación por omisión usada por el sistema
RPC.
AUTH *
authunix_create(host, uid, gid, len, aup_gids)
char *host;
int uid, gid, len, *aup.gids;
- Crea y devuelve una asa de autenticación
RPC que contiene información de autenticación. El
parámetro host es el nombre de la máquina en la que se ha
creado la información. uid es el ID del
usuario. gid es el ID del grupo actual del usuario.
len y aup_gids se refieren a un array de grupos a los que el
usuario pertenece. Es fácil hacerse pasar por un usuario.
AUTH *
authunix_create_default()
- Llama a authunix_create() con los parámetros
apropiados.
callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
char *host;
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
- Llama al procedimiento remoto asociado a prognum,
versnum y procnum de la máquina host. El
parámetro in es la dirección del (los) argumento(s) del
procedimiento, y out es la dirección donde colocar el (los)
resultado(s). inproc se usa para codificar los parámetros del
procedimiento, y outproc se usa para decodificar los resultados del
procedimiento. Esta rutina devuelve cero en caso de éxtio o el valor
de enum clnt_stat convertido a un entero, en caso de de fallo. La
rutina clnt_perrno() es adecuada para traducir estados de fallo a
mensajes.
- Cuidado: la llamada a procedimientos con esta rutina usa
UDP/IP como protocolo de transporte. Vea
clntudp_create() para restricciones. No tiene control de plazos de
tiempo o autenticación usando esta rutina.
enum clnt_stat
clnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
resultproc_t eachresult;
- Como callrpc(), salvo que el mensaje de llamada es
difundido a todas las redes de difusión conectadas localmente. Cada
vez que recibe una respuesta, esta rutina llama a eachresult(),
cuyo formato es:
eachresult(out, addr)
char *out;
struct sockaddr_in *addr;
- donde out es lo mimo que el out pasado a
clnt_broadcast(), salvo que la salida del procedimiento remoto se
decodifica allí. addr apunta a la dirección de la
máquina que ha devuelto los resultados. Si eachresult()
devuelve cero, clnt_broadcast() espera más respuestas. En otro
caso, termina con un estado apropiado.
- Cuidado: los conectores de difusión están
limitados en tamaño a la unidad de transferencia máxima del
enlace de datos. Para Ethernet, este valor es 1500 bytes.
enum clnt_stat
clnt_call(clnt, procnum, inproc, in, outproc, out, tout)
CLIENT *clnt;
u_long
procnum;
xdrproc_t inproc, outproc;
char *in, *out;
struct timeval tout;
- Una macro que llama al procedimiento remoto procnum
asociado a la asa de cliente clnt, que se obtiene con una rutina de
creación de clientes RPC tal como
clnt_create(). El parámetro in es la dirección del
(los) argumento(s) del procedimiento, y out es la dirección
donde colocar el (los) resultado(s). inproc se usa para codificar
los parámetros del procedimiento, y outproc se usa para
decodificar los resultados del procedimiento. tout es el plazo de
tiempo permitido para que los resultados lleguen.
clnt_destroy(clnt)
CLIENT *clnt;
- Una macro que destruye la asa RPC del
cliente. La destrucción usualmente implica la liberación de
estructuras de datos privadas, incluyendo el propio clnt. El uso de
clnt es indefinido tras llamar a clnt_destroy(). Si la
biblioteca RPC abrió el conector asociado,
también lo cerrará. En otro caso, el conector permanece abierto.
CLIENT *
clnt_create(host, prog, vers, proto)
char *host;
u_long prog, vers;
char *proto;
- Rutina genérica para la creación de clientes.
host identifica el nombre del anfitrión remoto donde se
encuentra el servidor. proto indica qué clase de protocolo de
transporte se usará. Los valores actualmente soportados para este
campo son “udp” y “tcp”. Se establecen los plazos
de tiempo por omisión, aunque se pueden modificar usando
clnt_control().
- Cuidado: el uso de UDP tiene sus defectos.
Ya que los mensajes RPC basados en UDP
sólo pueden contener hasta 8 Kbytes de dados codificados, este
protocolo de transporte no se puede usar para procedimientos que toman
grandes argumentos o devuelven resultados enormes.
bool_t
clnt_control(cl, req, info)
CLIENT *cl;
char *info;
- Una macro usada para cambiar u obtener información
diversa sobre un objeto cliente. req indica el tipo de
operación e info es un puntero a la información. Tanto
para UDP como para TCP, los valores
soportados de req, y sus tipos de argumento y lo que hacen los
mismos, son:
-
CLSET_TIMEOUT struct timeval establece el plazo de
tiempo total
CLGET_TIMEOUT struct timeval obtiene el plazo de
tiempo total
- Nota: si establece el plazo de tiempo usando
clnt_control(), el parámetro de plazo de tiempo pasado a
clnt_call() se ignorará en todas las llamadas futuras.
-
CLGET_SERVER_ADDR struct sockaddr_in obtiene la dirección
del servidor
- Las siguientes operaciones sólo son válidas para
UDP:
-
CLSET_RETRY_TIMEOUT struct timeval establece el plazo
para reintento
CLGET_RETRY_TIMEOUT struct timeval obtiene el plazo
de reintento
- El plazo de reintento es el tiempo que la RPC
UDP espera a que el servidor responda antes de retransmitir la
petición.
clnt_freeres(clnt, outproc, out)
CLIENT *clnt;
xdrproc_t outproc;
char *out;
- Una macro que libera cualquier dato reservado por el
sistema RPC/XDR cuando decodifica los resultados de una
llamada RPC. El parámetro out es la
dirección de los resultados, y outproc es la rutina
XDR que describe los resultados. Esta rutina devuelve uno
si los resultados se han liberado con éxito, y cero en caso
contrario.
void
clnt_geterr(clnt, errp)
CLIENT *clnt;
struct rpc_err *errp;
- Una macro que copia la estructura de error de la asa del
cliente a la estructura en la dirección errp.
void
clnt_pcreateerror(s)
char *s;
- Muestra un mensaje en la salida estándar de error
indicando por qué no se ha podido crear una asa RPC de
cliente. El mensaje es preterminado con la cadena s y un
carácter dos puntos. Se usa cuando una llamada a
clnt_create(), clntraw_create(), clnttcp_create() o
clntudp_create() falla.
void
clnt_perrno(stat)
enum clnt_stat stat;
- Muestra un mensaje en la salida de error estándar
correspondiente a la condición indicada por stat. Se usa tras
un callrpc().
clnt_perror(clnt, s)
CLIENT *clnt;
char *s;
- Muestra un mensaje en la salida de error estándar
indicando por qué ha fallado una llamada RPC.
clnt es la asa usada para hacer la llamada. El mensaje es
preterminado con la cadena s y un carácter dos puntos. Se usa
tras un clnt_call().
char *
clnt_spcreateerror
char *s;
- Como clnt_pcreateerror(), excepto que devuelve una
cadena en lugar de mostrar la información en la salida estándar
de error.
- Fallos: devuelve un puntero a datos estáticos que se
sobrescriben en cada llamada.
char *
clnt_sperrno(stat)
enum clnt_stat stat;
- Toma los mismos argumentos que clnt_perrno(), pero
en lugar de enviar un mensaje a la salida de error estándar indicando
por qué ha fallado una llamada RPC, devuelve un
puntero a una cadena que contiene el mensaje. La cadena termina con un
carácter NEWLINE (nueva línea).
- clnt_sperrno() se usa en lugar de
clnt_perrno() si el programa no tiene una salida de error
estándar (como es bastante probable en un programa que funciona como
servidor) o si el programador no quiere que el mensaje sea mostrado con
printf, o si se va a usar un formato de mensaje diferente del
soportado por clnt_perrno(). Nota: a diferencia de
clnt_sperror() y clnt_spcreaterror(), clnt_sperrno()
devuelve un puntero a datos estáticos pero el resultado no se
sobrescribirá en cada llamada.
char *
clnt_sperror(rpch, s)
CLIENT *rpch;
char *s;
- Igual que clnt_perror(), salvo que (como
clnt_sperrno()) devuelve una cadena en lugar de mostrar el mensaje
por la salida estándar de error.
- Fallos: devuelve un puntero a datos estáticos que se
sobrescriben en cada llamada.
CLIENT *
clntraw_create(prognum, versnum)
u_long prognum, versnum;
- Esta rutina crea un cliente RPC de juguete
(de mentira) para el programa remoto prognum, con versión
versnum. El medio de transporte usado para pasar mensajes al
servicio es realmente un buffer dentro del espacio de direcciones del
proceso, por lo que el servidor RPC correspondiente
debería residir en el mismo espacio de direcciones. Vea
svcraw_create(). Esto permite la simulación de
RPCs y la estimación de sobrecargas
RPC, tal como el tiempo de ida y vuelta, sin ninguna
interferencia del núcleo. Esta rutina devuelve NULL si
falla.
CLIENT *
clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)
struct sockaddr_in *addr;
u_long prognum, versnum;
int *sockp;
u_int sendsz, recvsz;
- Esta rutina crea un cliente RPC para el
programa remoto prognum, con versión versnum. El
cliente usa TCP/IP como protocolo de transporte. El
programa remoto se encuentra en la dirección de Internet
*addr. Si addr->sin_port es cero, entonces se le asigna
el puerto real por el que el programa remoto está escuchando (para
obtener esta información se consulta el servicio portmap
remoto). El parámetro sockp es un conector. Si vale
RPC_ANYSOCK, entonces esta rutina abre uno nuevo y se lo asigna a
sockp. Ya que la RPC basada en TCP
usa E/S mediante buffers, el ususario puede especificar el
tamaño de los buffers de envío y recepción con los
parámetros sendsz y recvsz. Los valores cero hacen que
se elijan valores por omisión adecuados. Esta rutina devuelve
NULL si falla.
CLIENT *
clntudp_create(addr, prognum, versnum, wait, sockp)
struct sockaddr_in *addr;
u_long prognum, versnum;
struct timeval wait;
int *sockp;
- Esta rutina crea un cliente RPC para el
programa remoto prognum, con versión versnum. El
cliente usa UDP/IP como protocolo de transporte. El
programa remoto se encuentra en la dirección de Internet addr.
Si addr->sin_port es cero, entonces se le asigna el puerto real
por el que el programa remoto está escuchando (para obtener esta
información se consulta el servicio portmap remoto). El
parámetro sockp es un conector. Si vale RPC_ANYSOCK,
esta rutina abre uno nuevo y se lo asigna a sockp. El transporte
UDP reenvía los mensajes de llamada a intervalos de
tiempo wait hasta que se recibe una respuesta o hasta que la
llamada agota su plazo de tiempo. El plazo total de tiempo para la llamada
se especifica en clnt_call().
- Cuidado: ya que los mensajes RPC basados en
RPC UDP sólo pueden contener 8 Kbytes
de datos codificados, este protocolo de transporte no se puede usar para
procedimientos que toman grandes argumentos o devuelven resultados
enormes.
CLIENT *
clntudp_bufcreate(addr, prognum, versnum, wait, sockp, sendsize, recosize)
struct sockaddr_in *addr;
u_long prognum, versnum;
struct timeval wait;
int *sockp;
unsigned int sendsize;
unsigned int recosize;
- Esta rutina crea un cliente RPC para el
programa remoto prognum, con versión versnum. El
cliente usa UDP/IP como protocolo de transporte. El
programa remoto se encuentra en la dirección de Internet addr.
Si addr->sin_port es cero, se le asigna el puerto real por le
que escucha el programa remoto (para obtener esta información se
consulta el servicio portmap remoto). El parámetro
sockp es un conector. Si vale RPC_ANYSOCK, esta rutina abre
uno nuevo y se lo asigna a sockp. El protocolo de transporte
UDP reenvía el mensaje de llamada a intervalos de
tiempo wait hasta que se recibe una respuesta o hasta que la
llamada agota su plazo de tiempo. El plazo total de tiempo para la llamada
viene especificado por clnt_call().
- Esta permite al usuario especificar el tamaño
máximo de paquete para enviar y recibir mensajes RPC
basados en UDP.
void
get_myaddress(addr)
struct sockaddr_in *addr;
- Rellena *addr con la dirección
IP de la máquina sin consultar las rutinas de
biblioteca que tratan con /etc/hosts. Como número de puerto
siempre se asigna htons(PMAPPORT).
struct pmaplist *
pmap_getmaps(addr)
struct sockaddr_in *addr;
- Una interfaz de usuario para el servicio portmap que
devuelve una lista de las asociaciones "programa
RPC-puerto" actuales de la máquina que se
encuentra en la dirección IP *addr. Esta rutina
puede devolver NULL . La orden `rpcinfo -p' usa esta
rutina.
u_short
pmap_getport(addr, prognum, versnum, protocol)
struct sockaddr_in *addr;
u_long prognum, versnum, protocol;
- Una interfaz de usuario para el servicio portmap que
devuelve el número de puerto en el que espera un servicio que soporta
el número de programa prognum, con versión
versnum, y habla el protocolo de transporte asociado con
protocol. El valor más probable de protocol es
IPPROTO_UDP o IPPROTO_TCP. Si se devuelve un valor
cero significa que no existe la asociación o que el sistema
RPC ha fallado al intentar contactar con el servicio
portmap remoto. En este último caso, la variable global
rpc_createerr() contiene el estado de la RPC.
enum clnt_stat
pmap_rmtcall(addr, prognum, versnum, procnum, inproc, in, outproc, out, tout, portp)
struct sockaddr_in *addr;
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
struct timeval tout;
u_long *portp;
- Una interfaz de usuario para el servicio portmap que
ordena al portmap de la máquina de dirección
IP *addr que realice una llamada RPC
en su nombre a un procedimiento en esa máquina. Al parámetro
*portp se le asignará el número de puerto del programa si
el procedimiento tiene éxito. Las definiciones de los otros
parámetros se discuten en callrpc() y clnt_call(). Este
procedimiento se debería usar para “ping” y nada
más. Vea también clnt_broadcast().
pmap_set(prognum, versnum, protocol, port)
u_long prognum, versnum, protocol;
u_short port;
- Una interfaz de usuario para el servicio portmap que
establece una correspondencia entre la terna
[prognum,versnum,protocol] y port, en el
servicio portmap de la máquina. El valor más probable de
protocol es IPPROTO_UDP o IPPROTO_TCP. Esta
rutina devuelve uno si tiene éxito y cero en caso contrario. Hecho
automáticamente por svc_register().
pmap_unset(prognum, versnum)
u_long prognum, versnum;
- Una interfaz de usuario para el servicio portmap que
destruye todas las correspondencias entre la terna
[prognum,versnum,*] y los ports del servicio
portmap de la máquina. Esta rutina devuelve uno si tiene
éxito y cero en caso contrario.
registerrpc(prognum, versnum, procnum, procname, inproc, outproc)
u_long prognum, versnum, procnum;
char *(*procname) () ;
xdrproc_t inproc, outproc;
- Registra el procedimiento procname en el paquete de
servicios RPC. Si llega una petición para el programa
prognum, con versión versnum, y procedimiento
procnum, se llama a procname con un puntero a su(s)
parámetro(s). progname debería devolver un puntero a
su(s) resultado(s) estático(s). inproc se usa para decodificar
los parámetros mientras que outproc se usa para codificar los
resultados. Esta rutina devuelve cero si el registro tiene éxtio y -1
en caso contrario.
- Cuidado: se accede a los procedimientos remotos registrados
de esta forma usando el protocolo de transporte UDP/IP. Vea
svcudp_create() para restricciones.
struct rpc_createerr rpc_createerr;
- Una variable global cuyo valor es establecido por cualquier
rutina de creación de clientes RPC que no tiene
éxito. Use la rutina clnt_pcreateerror() para mostrar el por
qué.
svc_destroy(xprt)
SVCXPRT *
xprt;
- Una macro que destruye la asa de transporte de un servicio
RPC, xprt. La destrucción usualmente implica la
liberación de estructuras de datos privadas, incluyendo el propio
xprt. El uso de xprt es indefinido tras llamar a esta
rutina.
fd_set svc_fdset;
- Una variable global que refleja la máscara de bits de
los descriptores de ficheros de lectura del lado del servicio
RPC. Esta variable es adecuada como parámetro de la
llamada al sistema select. Sólo es de interés si un
implementador de servicios no llama a svc_run(), sino que más
bien realiza su propio procesamiento de eventos asíncronos. Esta
variable es de sólo-lectura (¡no pase su dirección a
select!), aunque puede cambiar tras llamar a svc_getreqset()
o a cualquier rutina de creación.
int svc_fds;
- Similar a svc_fedset(), pero limitada a 32
descriptores. Esta interfaz queda obsoleta debido a svc_fdset().
svc_freeargs(xprt, inproc, in)
SVCXPRT *xprt;
xdrproc_t inproc;
char *in;
- Una macro que libera cualquier dato reservado por el
sistema RPC/XDR cuando decodificó los argumentos a un
procedimiento de servicio usando svc_getargs(). Esta rutina
devuelve 1 si los resultados se han liberado con éxito y cero en caso
contrario.
svc_getargs(xprt, inproc, in)
SVCXPRT *xprt;
xdrproc_t inproc;
char *in;
- Una macro que decodifica los argumentos de una
petición RPC asociada con la asa de transporte de un
servicio RPC xprt. El parámetro in es la
dirección donde se colocarán los argumentos. inproc es la
rutina XDR usada para decodificar los argumentos. Esta
rutina devuelve 1 si la decodificación tiene éxito y cero en
caso contrario.
struct sockaddr_in *
svc_getcaller(xprt)
SVCXPRT *xprt;
- La manera permitida de obtener la dirección de red del
invocador de un procedimiento asociado con la asa de transporte de un
servicio RPC, xprt.
svc_getreqset(rdfds)
fd_set *rdfds;
- Esta rutina sólo es de interés si un
implementador de servicios no llama a svc_run(), sino que en su
lugar implementa un procesamiento de eventos asíncronos a su medida.
Se llama cuando la llamada al sistema select ha determinado que ha
llegado una petición RPC en algún conector
RPC. rdfds es la máscara de bits resultante de
descriptores de ficheros de lectura. La rutina termina cuando se han
servido todos los conectores asociados con el valor de rdfds.
svc_getreq(rdfds)
int rdfds;
- Similar a svc_getreqset(), pero limitada a 32
descriptores. Esta interfaz queda obsoleta debido a
svc_getreqset().
svc_register(xprt, prognum, versnum, dispatch, protocol)
SVCXPRT *xprt;
u_long prognum, versnum;
void (*dispatch) ();
u_long protocol;
- Asocia prognum y versnum con el procedimiento
de atención de servicio, dispatch. Si protocol es cero,
el servicio no se registra con el servicio portmap. Si
protocol no es cero, se establece una correspondencia entre la
terna [prognum,versnum,protocol] y
xprt->xp_port con el servicio portmap local (generalmente
protocol es cero, IPPROTO_UDP o
IPPROTO_TCP). El procedimiento dispatch tiene el
siguiente formato:
dispatch(request, xprt)
struct svc_req *request;
SVCXPRT *xprt;
- La rutina svc_register() devuelve uno en caso de
éxito y cero en caso contrario.
svc_run()
- Esta rutina nunca regresa. Espera la llegada de peticiones
RPC y llama al procedimiento de servicio apropiado usando
svc_getreq() cuando llega una. Usualmente, este procedimiento
está esperando a que termine una llamada al sistema select().
svc_sendreply(xprt, outproc, out)
SVCXPRT *xprt;
xdrproc_t outproc;
char *out;
- Llamada por una rutina de atención de un servicio
RPC para enviar los resultados de una llamada a un
procedimiento remoto. El parámetro xprt es la asa de
transporte asociada de la petición. outproc es la rutina
XDR que se usa para codificar los resultados. Y out
es la dirección de los resultados. Esta rutina devuelve uno si tiene
éxito y cero en caso contrario.
void
svc_unregister(prognum, versnum)
u_long prognum, versnum;
- Elimina todas las correspondencias entre el par
[prognum,versnum] y las rutinas de atención, y entre la
terna [prognum,versnum,*] y el número de puerto.
void
svcerr_auth(xprt, why)
SVCXPRT *xprt;
enum auth_stat why;
- Llamada por una rutina de atención de servicios que
rechaza realizar una llamada a un procedimiento remoto debido a un error
de autenticación.
void
svcerr_decode(xprt)
SVCXPRT *xprt;
- Llamada por una rutina de atención de servicios que no
puede decodificar con éxito sus parámetros. Vea también
svc_getargs().
void
svcerr_noproc(xprt)
SVCXPRT *xprt;
- Llamada por una rutina de atención de servicios que no
implanta el número de procedimiento que solicita el invocador.
void
svcerr_noprog(xprt)
SVCXPRT *xprt;
- Llamada cuando el programa deseado no está registrado
en el paquete RPC. Usualmente, los implementadores de
servicios no necesitan esta rutina.
void
svcerr_progvers(xprt)
SVCXPRT *xprt;
- Llamada cuando la versión deseada de un programa no
está registrada en el paquete RPC. Usualmente, los
implementadores de servicios no necesitan esta rutina.
void
svcerr_systemerr(xprt)
SVCXPRT *xprt;
- Llamada por una rutina de atención de servicios cuando
detecta un error de sistema no cubierto por ningún protocolo
particular. Por ejemplo, si un servicio no puede ya reservar
almacenamiento, puede llamar a esta rutina.
void
svcerr_weakauth(xprt)
SVCXPRT *xprt;
- Llamada por una rutina de atención de servicios que
rechaza realizar una llamada a un procedimiento remoto debido a
insuficientes parámetros de autenticación. La rutina llama a
svcerr_auth(xprt, AUTH_TOOWEAK).
SVCXPRT *
svcfd_create(fd, sendsize, recvsize)
int fd;
u_int sendsize;
u_int recvsize;
- Crea un servicio sobre cualquier descriptor abierto.
Típicamente, este descriptor es un conector conectado para un
protocolo orientado a conexión tal como TCP.
sendsize y recvsize indican los tamaños para los
buffers de envío y recepción. Si son cero, se eligen valores por
omisión razonables.
SVCXPRT *
svcraw_create()
- Esta rutina crea un medio de transporte de servicio
RPC de juguete al que devuelve un puntero. El medio de
transporte es en realidad un buffer dentro del espacio de direcciones del
proceso, por lo que el cliente RPC correspondiente
debería residir en el mismo espacio de direcciones. Vea
clntraw_create(). Esta rutina permite la simulación de
RPCs y la estimación de sobrecargas RPC
(tal como el tiempo de ida y vuelta), sin ninguna interferencia del
núcleo. Esta rutina devuelve NULL cuando falla.
SVCXPRT *
svctcp_create(sock, send_buf_size, recv_buf_size)
int sock;
u_int send_buf_size, recv_buf_size;
- Esta rutina crea un medio de transporte de servicio
RPC basado en TCP/IP devolviendo un puntero
al mismo. El medio de transporte se asociada con el conector sock,
que puede ser RPC_ANYSOCK, en cuyo caso se crea un nuevo conector.
Si no se asocia el conector a un puerto TCP local, esta
rutina lo asocia a un puerto arbitrario. Al terminar,
xprt->xp_sock es el descriptor del conector del medio de
transporte y xprt->xp_port es el número de puerto del medio
de transporte. Esta rutina devuelve NULL si falla. Ya que
la RPC basada en TCP usa E/S
con buffers, los usuarios pueden especificar el tamaño de los
buffers. Los valores cero hacen que se seleccionen valores por
omisión adecuados.
SVCXPRT *
svcudp_bufcreate(sock, sendsize, recosize)
int sock;
- Esta rutina crea un medio de transporte de servicio
RPC basado en UDP/IP devolviendo un puntero
al mismo. El medio de transporte se asocia con el conector sock,
que puede ser RPC_ANYSOCK, en cuyo caso se crea un nuevo conector.
Si el conector no está asociado a un puerto UDP local,
esta rutina lo asocia a un puerto arbitrario. Al terminar,
xprt->xp_sock es el descriptor del conector del medio de
transporte y xprt->xp_port es el número de puerto del medio
de transporte. Esta rutina devuelve NULL si falla.
- Esta rutina permite al usuario especificar el tamaño
de paquete máximo para enviar y recibir mensajes RPC
basados en UDP.
SVCXPRT *
svcudp_create(sock)
int sock;
- Esta llamada es equivalente a
svcudp_bufcreate(sock,SZ,SZ) para algún tamaño SZ
por omisión.
xdr_accepted_reply(xdrs, ar)
XDR *xdrs;
struct accepted_reply *ar;
- Usada para codificar mensajes de respuesta
RPC. Esta rutina es útil para aquellos usuarios que
desean generar mensajes al estilo RPC sin usar el paquete
RPC.
xdr_authunix_parms(xdrs, aupp)
XDR *xdrs;
struct authunix_parms *aupp;
- Se usa para describir credenciales UNIX.
Esta rutina es útil para aquellos usuarios que desean generar estas
credenciales sin usar el paquete de autenticación RPC.
void
xdr_callhdr(xdrs, chdr)
XDR *xdrs;
struct rpc_msg *chdr;
- Se usa para describir mensajes de cabecera de llamadas
RPC. Esta rutina es útil para aquellos usuarios que
desean generar mensajes al estilo RPC sin usar el paquete
RPC.
xdr_callmsg(xdrs, cmsg)
XDR *xdrs;
struct rpc_msg *cmsg;
- Se usa para describir mensajes de llamada
RPC. Esta rutina es útil para aquellos usuarios que
desean generar mensajes al estilo RPC sin usar el paquete
RPC.
xdr_opaque_auth(xdrs, ap)
XDR *xdrs;
struct opaque_auth *ap;
- Se usa para describir mensajes de información de
autenticación RPC. Esta rutina es útil para
aquellos usuarios que desean generar mensajes al estilo RPC
si usar el paquete RPC.
xdr_pmap(xdrs, regs)
XDR *xdrs;
struct pmap *regs;
- Se usa para describir, externamente, los parámetros de
diversos procedimientos de portmap. Esta rutina es útil para
aquellos usuarios que desean generar estos parámetros sin usar la
interfaz pmap.
xdr_pmaplist(xdrs, rp)
XDR *xdrs;
struct pmaplist **rp;
- Se usa para describir, externamente, una lista de
correspondencias de puerto. Esta rutina es útil para aquellos
usuarios que desean generar estos parámetros sin usar la interfaz
pmap.
xdr_rejected_reply(xdrs, rr)
XDR *xdrs;
struct rejected_reply *rr;
- Se usa para describir mensajes de respuesta
RPC. Esta rutina es útil para aquellos usuarios que
desean generar mensajes al estilo RPC sin usar el paquete
RPC.
xdr_replymsg(xdrs, rmsg)
XDR *xdrs;
struct rpc_msg *rmsg;
- Se usa para describir mensajes de respuesta
RPC. Esta rutina es útil para aquellos usuarios que
desean generar mensajes al estilo RPC sin usar el paquete
RPC.
void
xprt_register(xprt)
SVCXPRT *xprt;
- Después de que se creen las asas de transporte del
servicio RPC, deben registrarse a sí mismas en el
paquete de servicios RPC. Esta rutina modifica la variable
global svc_fds(). Usualmente, los implementadores de servicios no
necesitan esta rutina.
void
xprt_unregister(xprt)
SVCXPRT *xprt;
- Antes de que se destruya una asa de transporte del servicio
RPC, debe darse de baja a sí misma en el paquete de
servicios RPC. Esta rutina modifica la variable global
svc_fds(). Usualmente, los constructores de servicios no necesitan
esta rutina.
VÉASE TAMBIÉN¶
rpc_secure(3),
xdr(3)
Los siguientes manuales:
Remote Procedure Calls: Protocol Specification
Remote Procedure Call Programming Guide
rpcgen Programming Guide
RPC: Remote Procedure Call Protocol Specification,
RFC1050, Sun
Microsystems, Inc., USC-ISI.