Provided by: manpages-es-dev_4.13-4_all bug

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.

       To take use of these routines, include the header file <rpc/rpc.h>.

       The prototypes below make use of the following types:

           typedef int bool_t;

           typedef bool_t (*xdrproc_t) (XDR *, void *, ...);

           typedef bool_t (*resultproc_t) (caddr_t resp,
                                           struct sockaddr_in *raddr);

       See the header files for the declarations of the AUTH, CLIENT, SVCXPRT, and XDR types.

       void auth_destroy(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(void);

              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(char *host, int uid, int gid,
                             int len, int *aup_gids);

              Create  and  return  an  RPC  authentication  handle  that  contains authentication
              information.  The  parameter  host  is  the  name  of  the  machine  on  which  the
              information was created; uid is the user's user ID; gid is the user's current group
              ID; len and aup_gids refer to a counted array of groups to which the user  belongs.
              It is easy to impersonate a user.

       AUTH *authunix_create_default(void);

              Llama a authunix_create() con los parámetros apropiados.

       int callrpc(char *host, unsigned long prognum,
                   unsigned long versnum, unsigned long procnum,
                   xdrproc_t inproc, char *in,
                   xdrproc_t outproc, char *out);

              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(unsigned long prognum,
                            unsigned long versnum, unsigned long procnum,
                            xdrproc_t inproc, char *in,
                            xdrproc_t outproc, char *out,
                            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(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(CLIENT *clnt, unsigned long procnum,
                           xdrproc_t inproc, char *in,
                           xdrproc_t outproc, char *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(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(char *host, unsigned long prog,
                           unsigned long 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(CLIENT *cl, int req, 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 // set total timeout
                  CLGET_TIMEOUT  struct timeval // get total timeout

              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  // get server's address

              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(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(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(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(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(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(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(3),
              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(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(unsigned long prognum, unsigned long 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  RPC  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(struct sockaddr_in *addr,
                       unsigned long prognum, unsigned long versnum,
                       int *sockp, unsigned int sendsz, unsigned int 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(struct sockaddr_in *addr,
                       unsigned long prognum, unsigned long 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(struct sockaddr_in *addr,
                   unsigned long prognum, unsigned long 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 rutina permite al usuario especificar el tamaño de paquete máximo para  enviar
              y recibir mensajes RPC basados en UDP.

       void get_myaddress(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(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.

       unsigned short pmap_getport(struct sockaddr_in *addr,
                           unsigned long prognum, unsigned long versnum,
                           unsigned int 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(struct sockaddr_in *addr,
                           unsigned long prognum, unsigned long versnum,
                           unsigned long procnum,
                           xdrproc_t inproc, char *in,
                           xdrproc_t outproc, char *out,
                           struct timeval tout, unsigned 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().

       bool_t pmap_set(unsigned long prognum, unsigned long versnum,
                       unsigned int protocol, unsigned 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().

       bool_t pmap_unset(unsigned long prognum, unsigned long 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.

       int registerrpc(unsigned long prognum, unsigned long versnum,
                       unsigned long procnum, char *(*procname)(char *),
                       xdrproc_t inproc, xdrproc_t 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).  procname 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é.

       void svc_destroy(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;

              A global variable reflecting the RPC service side's read file descriptor bit  mask;
              it  is  suitable as a parameter to the select(2)  system call.  This is of interest
              only if a service implementor does their own asynchronous event processing, instead
              of  calling  svc_run().   This  variable  is  read-only (do not pass its address to
              select(2)!), yet it may change after calls  to  svc_getreqset()   or  any  creation
              routines.

       int svc_fds;

              Similar  to  svc_fdset,  but  limited  to  32  file descriptors.  This interface is
              obsoleted by svc_fdset.

       svc_freeargs(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(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(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.

       void svc_getreqset(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(2) 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.

       void svc_getreq(int rdfds);

              Similar  to svc_getreqset(), but limited to 32 file descriptors.  This interface is
              obsoleted by svc_getreqset().

       bool_t svc_register(SVCXPRT *xprt, unsigned long prognum,
                           unsigned long versnum,
                           void (*dispatch)(svc_req *, SVCXPRT *),
                           unsigned 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(struct svc_req *request, SVCXPRT *xprt);

              La rutina svc_register() devuelve uno en caso de éxito y cero en caso contrario.

       void svc_run(void);

              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(2).

       bool_t svc_sendreply(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(unsigned long prognum, unsigned long 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(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(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(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(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(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(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(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(int fd, unsigned int sendsize,
                             unsigned int recvsize);

              Create a service on  top  of  any  open  file  descriptor.   Typically,  this  file
              descriptor  is  a connected socket for a stream protocol such as TCP.  sendsize and
              recvsize indicate sizes for the send and receive buffers.   If  they  are  zero,  a
              reasonable default is chosen.

       SVCXPRT *svcraw_create(void);

              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  RPC 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(int sock, unsigned int send_buf_size,
                              unsigned int 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(int sock, unsigned int sendsize,
                                 unsigned int recosize);

              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(int sock);

              Esta llamada es equivalente a svcudp_bufcreate(sock,SZ,SZ) para algún tamaño SZ por
              omisión.

       bool_t xdr_accepted_reply(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.

       bool_t xdr_authunix_parms(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(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.

       bool_t xdr_callmsg(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.

       bool_t xdr_opaque_auth(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.

       bool_t xdr_pmap(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.

       bool_t xdr_pmaplist(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.

       bool_t xdr_rejected_reply(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.

       bool_t xdr_replymsg(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(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(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.

ATRIBUTOS

       Para obtener una explicación de los términos usados en esta sección, véase attributes(7).

       ┌────────────────────────────────────┬────────────────────┬───────────────────┐
       │InterfazAtributoValor             │
       ├────────────────────────────────────┼────────────────────┼───────────────────┤
       │auth_destroy(), authnone_create(),  │ Seguridad del hilo │ Multi-hilo seguro │
       │authunix_create(),                  │                    │                   │
       │authunix_create_default(),          │                    │                   │
       │callrpc(), clnt_broadcast(),        │                    │                   │
       │clnt_call(), clnt_destroy(),        │                    │                   │
       │clnt_create(), clnt_control(),      │                    │                   │
       │clnt_freeres(), clnt_geterr(),      │                    │                   │
       │clnt_pcreateerror(), clnt_perrno(), │                    │                   │
       │clnt_perror(),                      │                    │                   │
       │clnt_spcreateerror(),               │                    │                   │
       │clnt_sperrno(), clnt_sperror(),     │                    │                   │
       │clntraw_create(), clnttcp_create(), │                    │                   │
       │clntudp_create(),                   │                    │                   │
       │clntudp_bufcreate(),                │                    │                   │
       │get_myaddress(), pmap_getmaps(),    │                    │                   │
       │pmap_getport(), pmap_rmtcall(),     │                    │                   │
       │pmap_set(), pmap_unset(),           │                    │                   │
       │registerrpc(), svc_destroy(),       │                    │                   │
       │svc_freeargs(), svc_getargs(),      │                    │                   │
       │svc_getcaller(), svc_getreqset(),   │                    │                   │
       │svc_getreq(), svc_register(),       │                    │                   │
       │svc_run(), svc_sendreply(),         │                    │                   │
       │svc_unregister(), svcerr_auth(),    │                    │                   │
       │svcerr_decode(), svcerr_noproc(),   │                    │                   │
       │svcerr_noprog(), svcerr_progvers(), │                    │                   │
       │svcerr_systemerr(),                 │                    │                   │
       │svcerr_weakauth(),                  │                    │                   │
       │svcfd_create(), svcraw_create(),    │                    │                   │
       │svctcp_create(),                    │                    │                   │
       │svcudp_bufcreate(),                 │                    │                   │
       │svcudp_create(),                    │                    │                   │
       │xdr_accepted_reply(),               │                    │                   │
       │xdr_authunix_parms(),               │                    │                   │
       │xdr_callhdr(),                      │                    │                   │
       │xdr_callmsg(), xdr_opaque_auth(),   │                    │                   │
       │xdr_pmap(), xdr_pmaplist(),         │                    │                   │
       │xdr_rejected_reply(),               │                    │                   │
       │xdr_replymsg(),                     │                    │                   │
       │xprt_register(), xprt_unregister()  │                    │                   │
       └────────────────────────────────────┴────────────────────┴───────────────────┘

VÉASE TAMBIÉN

       xdr(3)

       Los siguientes manuales:
              Remote Procedure Calls: Protocol Specification
              Remote Procedure Call Programming Guide
              rpcgen Programming Guide

       RPC: Remote Procedure Call  Protocol  Specification,  RFC 1050,  Sun  Microsystems,  Inc.,
       USC-ISI.

COLOFÓN

       Esta  página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una
       descripción del proyecto, información sobre cómo informar errores y la última  versión  de
       esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

       La  traducción  al  español  de  esta  página  del  manual  fue  creada  por  Juan Piernas
       <piernas@ditec.um.es>

       Esta traducción es documentación libre; lea  la  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o posterior con respecto a las condiciones de
       copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si encuentra algún error en la traducción de esta  página  del  manual,  envíe  un  correo
       electrónico a debian-l10n-spanish@lists.debian.org ⟨⟩.

                                         1 Noviembre 2020                                  RPC(3)