RPC(3)

명칭
rpc - 리모트 프로듀서 콜용 프로그램 라이브러리 routine

프로그램 라이브러리
libc

서식
<rpc/rpc.h>

함수의 설명에 대해서는 해설 (을)를 참조해 주세요.

해설
이 routine에서는, C 프로그램을 사용해, 네트워크를 통해 다른 머신으로 프로시저 호출을 실행할 수 있습니다. 우선 클라이언트가 프로시저를 호출해, 데이터 패킷을 서버에 송신합니다. 패킷을 받은 서버는, 디스팟치르틴을 호출해, 요구된 서비스를 실행하고 나서 응답을 돌려 보냅니다. 마지막으로, 프로시저 호출이 클라이언트로 돌아옵니다.

Secure RPC (DES 인증)에 사용하는 routine에 대해서는, rpc_secure(3) 그리고 설명합니다. Secure RPC 하 DES 암호화를 사용할 수 있는 경우에게만 사용할 수 있습니다.

    void
    auth_destroy(AUTH *auth)

    auth 에 관련하는 인증 정보를 파괴하는 매크로입니다. 일반적으로, 파괴에는 프라이빗 데이터 구조의 해방도 포함됩니다. auth_destroy() (을)를 호출한 다음에 auth (을)를 사용한 결과는 부정이 됩니다.

    AUTH *
    authnone_create()

    각 리모트 프로듀서 콜로 사용할 수 없는 인증 정보를 건네준다 RPC 인증 핸들을 작성해 되돌립니다. RPC (은)는, 이 인증을 디폴트로 사용합니다.

    AUTH *
    authunix_create(char *host, int uid, int gid, int len, int *aup_gids)

    인증 정보를 포함한다 RPC UNIX 인증 핸들을 작성해 되돌립니다. 파라미터 host (은)는, 정보를 작성하는 머신의 이름입니다. uid (은)는, 유저의 유저 ID 입니다. gid (은)는, 유저의 현행 그룹 ID 입니다. len (와)과 aup_gids (은)는, 유저가 속하는 그룹의 배열을 나타냅니다. 어느 유저가 되어 끝내는 것이 용이합니다.

    AUTH *
    authunix_create_default()

    적절한 파라미터로 authunix_create() (을)를 호출합니다.

    callrpc(char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out)

    머신 host 그리고 prognum, versnum, procnum 에 관련하는 리모트 프로시저를 호출합니다. 파라미터 in (은)는, 프로시저의 인수 주소로, out (은)는 결과를 배치하는 주소입니다. inproc (은)는, 프로시저의 파라미터를 디코드하기 위해서 사용해, outproc (은)는, 프로시저의 결과를 디코드하기 위해서 사용합니다. 이 routine는, 문제가 없으면 0 을 되돌려, 문제가 있는 경우는, enum clnt_stat (을)를 정수에 캐스트 한 값을 되돌립니다. 에러 스테이터스를 메세지로 변환하려면 , routine clnt_perrno() 하지만 편리합니다.

    경고: 이 routine로 리모트 프로시저를 호출하는 경우는, UDP/IP 하지만 트랜스폴트층으로서 사용됩니다. 제한 사항에 대해서는, clntudp_create() (을)를 참조해 주세요. 이 routine를 사용했을 경우, 타임 아웃이나 인증은 제어할 수 없습니다.

    enum clnt_stat
    clnt_broadcast(u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, bool_t (*eachresult)(caddr_t, struct sockaddr_in *))

    로컬로 접속 떠날 수 있어 모든 브로드캐스트 넷에 호출 메세지가 브로드캐스트 되는 것을 제외하면, callrpc() (와)과 같습니다. 이 routine는, 응답을 받아들일 때마다, 이하의 형식의 eachresult() (을)를 호출합니다.

    bool_t eachresult(caddr_t out, struct sockaddr_in *addr)

    out (은)는, 리모트 프로시저의 출력이 디코드되는 것을 제외하면, clnt_broadcast() 에게 건네진다 out (와)과 같습니다. addr (은)는, 결과를 송신하는 머신의 주소를 가리킵니다. eachresult() 하지만 0 을 되돌리는 경우, clnt_broadcast() (은)는 다음의 응답을 기다립니다. 0 을 되돌리지 않는 경우는, 적절한 스테이터스로 돌아옵니다.

    경고: 브로드캐스트 소켓의 사이즈는, 데이터 링크의 최대 전송 단위에 제한되고 있습니다. 이더넷(ethernet)의 경우, 이 값은 1500 바이트입니다.

    enum clnt_stat
    clnt_call(CLIENT *clnt, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout)

    clnt_create() 등의 RPC 클라이언트 작성 routine로 입수한, 클라이언트 핸들 clnt 에 관련하는 리모트 프로시저 procnum (을)를 호출하는 매크로입니다. 파라미터 in (은)는 프로시저의 인수의 주소로, out (은)는 결과를 배치하는 주소입니다. inproc (은)는 프로시저의 파라미터의 디코드에 사용해, outproc (은)는 프로시저의 결과의 디코드에 사용합니다. tout (은)는, 결과가 돌아올 때까지의 시간입니다.

    void clnt_destroy(CLIENT *clnt)

    클라이언트의 RPC 핸들을 파괴하는 매크로입니다. 통상의 경우, 파괴에는, clnt 도 포함한 프라이빗 데이터 구조의 해방도 포함됩니다. clnt_destroy() (을)를 호출한 다음에 clnt (을)를 사용한 결과는 부정이 됩니다. RPC 프로그램 라이브러리가 관련 소켓을 열었을 경우는 그것도 닫습니다. 관련 소켓을 열고 있지 않은 경우, 소켓은 연 채로 남습니다.

    CLIENT *
    clnt_create(char *host, u_long prog, u_long vers, char *proto)

    일반적인 클라이언트 작성 routine입니다. host (은)는, 서버가 배치되고 있는 리모트 호스트의 이름을 지정합니다. proto (은)는, 사용하는 전송 프로토콜의 종류를 지정합니다. 이 필드에서 현재 서포트되고 있는 값은, "udp" (와)과 "tcp" 입니다. 타임 아웃은 디폴트가 설정되어 있습니다만, clnt_control() (을)를 사용해 수정할 수 있습니다.

    경고: UDP 의 사용에는 단점이 있습니다. UDP 베이스의 RPC 메세지는, 8 킬로바이트의 encode가 끝난 데이터까지 밖에 유지할 수 없기 때문에, 큰 인수를 취하는 프로시저나, 큰 결과를 되돌리는 프로시저에서는 사용할 수 없습니다.

    bool_t
    clnt_control(CLIENT *cl, u_int req, char *info)

    클라이언트 오브젝트의 다양한 정보의 변경이나 취득을 실시하는 매크로입니다. req (은)는 오퍼레이션의 타입을 지정해, info (은)는 정보의 포인터입니다. UDP (와)과 TCP 의 양쪽 모두로 서포트되고 있다 req 의 값, 인수 타입, 실행 내용은 이하와 같습니다.
    CLSET_TIMEOUT |
    struct timeval | 총타임 아웃의 설정
    CLGET_TIMEOUT |
    struct timeval | 총타임 아웃의 입수

    주의: 타임 아웃을 clnt_control() 그리고 설정하면(자), clnt_call() 에게 건네지는 타임 아웃 파라미터는, 후의 모든 호출로 무시됩니다.
    CLGET_SERVER_ADDR |
    struct sockaddr_in | get server's address

    이하의 오퍼레이션은 UDP 만으로 유효합니다.
    CLSET_RETRY_TIMEOUT |
    struct timeval | 재시행 타임 아웃의 설정
    CLGET_RETRY_TIMEOUT |
    struct timeval | 재시행 타임 아웃의 입수
    CLSET_CONNECT | int | connect(2)
    (을)를 사용

    재시행 타임 아웃은, 서버가 응답하고 나서 요구를 재발송하는 것을 UDP RPC 하지만 대기하는 시간입니다.

    bool_t clnt_freeres(CLIENT *clnt, xdrproc_t outproc, char *out)

    RPC/XDR 시스템이 RPC 호출의 결과를 디코드하는 경우에 할당한 데이터를 해방하는 매크로입니다. 파라미터 out (은)는 결과의 주소로, outproc (은)는 결과를 기술한다 XDR routine입니다. 이 routine는, 결과가 문제 없게 해방되었을 경우는 1 을 되돌려, 문제가 발생했을 경우는 0 을 되돌립니다.

    void
    clnt_geterr(CLIENT *clnt, struct rpc_err *errp)

    클라이언트 핸들의 에러 구조를, 주소 errp 의 구조체에 카피하는 매크로입니다.

    void
    clnt_pcreateerror(char *s)

    클라이언트 RPC 핸들을 작성할 수 없는 이유를 나타내는 메세지를 표준 에러에 출력합니다. 메세지의 최초로는, 캐릭터 라인 s (와)과 코론이 붙습니다. 이것은, clnt_create(), clntraw_create(), clnttcp_create(), clntudp_create() 중 한쪽이 에러가 되었을 경우에 사용합니다.

    void
    clnt_perrno(enum clnt_stat stat)

    stat 하지만 가리키는 조건에 대응하는 메세지를 표준 에러에 출력합니다. callrpc() 의 다음에 사용해 주세요.

    void clnt_perror(CLIENT *clnt, char *s)

    RPC 호출이 에러가 된 이유를 나타내는 메세지를 표준 에러에 출력합니다. clnt (은)는, 호출의 실행에 사용한 핸들입니다. 메세지 최초로는, 캐릭터 라인 s (와)과 코론이 붙습니다. clnt_call() 의 다음에 사용해 주세요.

    char *
    clnt_spcreateerror(char *s)

    표준 에러에 출력하는 대신에 캐릭터 라인을 되돌리는 것을 제외하면, clnt_pcreateerror() (와)과 같습니다.

    버그: 각 호출로 덧쓰기된 정적 데이터의 포인터를 되돌립니다.

    char *
    clnt_sperrno(enum clnt_stat stat)

    clnt_perrno() (와)과 같은 인수를 취합니다만, RPC 호출이 에러가 된 이유를 나타내는 메세지를 표준 에러에 송신하는 대신에, 메세지를 포함한 캐릭터 라인의 포인터를 되돌립니다. 캐릭터 라인은 개행 (‘\n’) 그리고 끝납니다.

    프로그램에 표준 에러가 없는 경우 (서버로서 실행하고 있는 프로그램에는 표준 에러가 없는 것이 많다), 또는 메세지를 printf() 그리고 출력할 필요가 없는 경우, 혹은 clnt_perrno() 하지만 서포트하는 것 이외의 메세지 포맷을 사용하는 경우는, clnt_perrno() 대신에 clnt_sperrno() (을)를 사용합니다.

    주의: clnt_sperror() (와)과 clnt_spcreaterror() 과는 달리, clnt_sperrno() (은)는 정적 데이터의 포인터를 되돌립니다만, 결과는 각 호출로 덧쓰기되지 않습니다.

    char *
    clnt_sperror(CLIENT *rpch, char *s)

    clnt_sperrno() (와)과 같이, 표준 에러에 출력하지 않고 캐릭터 라인을 되돌리는 것을 제외하면, clnt_perror() (와)과 같습니다.

    버그: 각 호출로 덧쓰기된 정적 데이터의 포인터를 되돌립니다.

    CLIENT *
    clntraw_create(u_long prognum, u_long versnum)

    리모트 프로그램 prognum 버젼 versnum 의 토이 RPC 클라이언트를 작성합니다. 서비스에 메세지를 건네주는 실제의 트랜스폴트는, 프로세스의 주소 스페이스내에 있는 버퍼이므로, 대응한다 RPC 서버는 같은 주소 스페이스에 존재할 필요가 있습니다. svcraw_create() (을)를 참조해 주세요. 이것에 의해, RPC 의 시뮬레이션, 및 왕복 여행 타임 등, RPC 오버헤드의 취득을 커널의 간섭없이 실행할 수 있습니다. 이 routine는, 에러가 발생하면(자) NULL (을)를 되돌립니다.

    CLIENT *
    clnttcp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, int *sockp, u_int sendsz, u_int recvsz)

    리모트 프로그램 prognum 버젼 versnum 의 RPC 클라이언트를 작성합니다. 클라이언트는, 트랜스폴트로서 TCP/IP (을)를 사용합니다. 리모트 프로그램은, 인터넷 주소 addr 에 있습니다. addr->sin_port 하지만 0 인 경우는, 리모트 프로그램이 주의를 향하는 실제의 포트로 설정됩니다 ( portmap(8) 서비스는 이 정보로 조사할 수 있습니다). 파라미터 sockp (은)는 소켓입니다. 이 파라미터가 RPC_ANYSOCK 인 경우, 이 routine는 새로운 소켓을 열어 sockp (을)를 설정합니다. TCP 베이스의 RPC (은)는 버퍼에 의한다 I/O (을)를 사용하므로, 유저는 파라미터 sendsz (와)과 recvsz 그리고 송신 버퍼와 수신 버퍼의 사이즈를 지정할 수 있습니다. 값을 0 으로 하면(자), 적절한 디폴트가 선택됩니다. 이 routine는, 에러가 되면(자) NULL (을)를 되돌립니다.

    CLIENT *
    clntudp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp)

    리모트 프로그램 prognum 버젼 versnum 의 RPC 클라이언트를 작성합니다. 클라이언트는, 트랜스폴트로서 UDP/IP (을)를 사용합니다. 리모트 프로그램은, 인터넷 주소 addr 에 있습니다. addr->sin_port 하지만 0 인 경우는, 리모트 프로그램이 주의를 향하는 실제의 포트로 설정됩니다 (리모트 portmap(8) 서비스는, 이 정보로 조사할 수 있습니다). 파라미터 sockp (은)는 소켓입니다. 이 파라미터가 RPC_ANYSOCK 인 경우, 이 routine는 새로운 소켓을 열어 sockp (을)를 설정합니다. UDP 트랜스폴트는, 응답을 받아들일 때까지, 또는 호출이 타임 아웃이 될 때까지, wait 시간 간격으로 호출해 메세지를 재발송신 합니다. 호출이 타임 아웃이 되는 시간은, 그리고 지정합니다.

    경고: UDP 베이스의 RPC 메세지는, 8 킬로바이트의 encode가 끝난 데이터까지 밖에 유지할 수 없기 때문에, 큰 인수를 취하는 프로시저나 큰 결과를 되돌리는 프로시저에서는 사용할 수 없습니다.

    CLIENT *
    clntudp_bufcreate(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp, unsigned int sendsize, unsigned int recosize)

    리모트 프로그램 prognum 버젼 versnum 의 RPC 클라이언트를 작성합니다. 클라이언트는, 트랜스폴트로서 UDP/IP (을)를 사용합니다. 리모트 프로그램은, 인터넷 주소 addr 에 있습니다. addr->sin_port 하지만 0 인 경우는, 리모트 프로그램이 주의를 향하는 실제의 포트로 설정됩니다 (리모트 portmap(8) 서비스는, 이 정보로 조사할 수 있습니다). 파라미터 sockp (은)는 소켓입니다. 이 파라미터가 RPC_ANYSOCK 인 경우, 이 routine는 새로운 소켓을 열어 sockp (을)를 설정합니다. UDP 트랜스폴트는, 응답을 받아들일 때까지, 또는 호출이 타임 아웃이 될 때까지 wait 시간 간격으로 호출해 메세지를 재발송신 합니다. 호출이 타임 아웃이 되는 시간은, clnt_call() 그리고 지정합니다.

    유저는, UDP 베이스의 RPC 메세지의 송수신을 실시하는, 최대 패킷 사이즈를 지정할 수 있습니다.

    int
    get_myaddress(struct sockaddr_in *addr)

    /etc/hosts (을)를 처리하는 프로그램 라이브러리 routine를 참고로 하지 않고, 머신의 IP 주소를 addr 에 넣습니다. 포트 번호는, 항상 htons(PMAPPORT) (으)로 설정됩니다. 문제가 없는 경우는 0 을 되돌려, 문제가 있는 경우는 0 이외를 되돌립니다.

    struct pmaplist *
    pmap_getmaps(struct sockaddr_in *addr)

    portmap(8) 서비스의 유저 인터페이스로, IP 주소 addr 에 있는 호스트의 RPC 프로그램과 포트의 현행의 매핑의 리스트를 되돌립니다. 이 routine는 NULL (을)를 되돌리는 일이 있습니다. 명령 “rpcinfo -p” (은)는 이 routine를 사용합니다.

    u_short
    pmap_getport(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long protocol)

    portmap(8) 서비스의 유저 인터페이스로, 프로그램 번호 prognum 버젼 versnum (을)를 서포트하는 서비스를 기다려, protocol 에 관련하는 전송 프로토콜을 나타내는 포트 번호를 되돌립니다. protocol 의 값은, 대부분의 경우 IPPROTO_UDP 인가 IPPROTO_TCP 입니다. 매핑이 존재하지 않는 경우, 또는 RPC 시스템이 리모트 portmap(8) 서비스와 접촉할 수 없는 경우, 반환값은 0 이 됩니다. 후자의 경우, rpc_createerr 에는 RPC 스테이터스가 들어갑니다.

    enum clnt_stat
    pmap_rmtcall(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout, u_long *portp)

    portmap(8) 서비스의 유저 인터페이스로, IP 주소 addr 의 호스트의 프로시저를 RPC 호출로 하도록(듯이), 그 호스트의 portmap(8) 에 인스트럭션 합니다. 프로시저로 문제가 발생하지 않는 경우, 파라미터 portp (은)는 프로그램의 포트 번호에 수정됩니다. 그 외의 파라미터에 대해서는, callrpc() (와)과 clnt_call() (을)를 참조해 주세요 이 프로시저는, “ping” 이외로 사용할 것은 없습니다. clnt_broadcast() 도 참조해 주세요.

    bool_t pmap_set(u_long prognum, u_long versnum, u_long protocol, u_short port)

    portmap(8) 서비스의 유저 인터페이스로, (prognum, versnum, protocol) 의 3 개(살), 및 머신의 portmap(8) 서비스에서의 port 의 사이에 매핑을 확립합니다. protocol 의 값은, 대부분의 경우 IPPROTO_UDP 인가 IPPROTO_TCP. 입니다. 이 routine는 문제가 없으면 1 을 되돌려, 문제가 있는 경우는 0 을 되돌립니다. 이것은, svc_register() 그리고 자동적으로 실행됩니다.

    bool_t pmap_unset(u_long prognum, u_long versnum)

    portmap(8) 서비스의 유저 인터페이스로, (prognum, versnum, *) 의 3 개(살), 및 portmap(8) 서비스에서의 port 의 사이에 존재하는 매핑을 모두 파괴합니다. 이 routine는, 문제가 없으면 1 을 되돌려, 문제가 있는 경우는 0 을 되돌립니다.

    bool_t registerrpc(u_long prognum, u_long versnum, u_long procnum, char *(*procname)(void), xdrproc_t inproc, xdrproc_t outproc)

    RPC 서비스 패키지로 프로시저 procname (을)를 등록합니다. 프로그램 prognum 버젼 versnum 프로시저 procnum 하지만 요구되면(자), 파라미터의 포인터로 procname 하지만 불려 갑니다. progname (은)는, 정적 결과의 포인터를 되돌립니다. inproc (은)는 파라미터의 디코드에 사용되어 outproc (은)는 결과의 encode에 사용됩니다. 이 routine는, 등록으로 문제가 발생하지 않으면 0 을 되돌려, 문제가 발생하면(자) -1 를 되돌립니다.

    경고: 이 형식에서 등록된 리모트 프로시저는, UDP/IP 트랜스폴트로 액세스 됩니다. 제한 사항에 대해서는 svcudp_create() (을)를 참조해 주세요.

    struct rpc_createerr rpc_createerr;

    에러가 되었다 RPC 클라이언트 작성 routine로 값이 설정되는 글로벌 변수입니다. 에러의 원인을 출력하려면 , routine clnt_pcreateerror() (을)를 사용합니다.

    bool_t svc_destroy(SVCXPRT * xprt)

    RPC 서비스 전송 핸들 xprt (을)를 파괴하는 매크로입니다. 일반적으로 파괴 처리에는, xprt 도 포함한 프라이빗 데이터 구조의 해방도 포함됩니다. 이 routine를 호출한 다음에 xprt (을)를 사용한 결과는 부정이 됩니다.

    fd_set svc_fdset;

    RPC 서비스 사이드의 읽기 파일 기술자 비트 마스크를 나타내는 글로벌 변수입니다. select(2) 시스템 콜의 템플릿 파라미터로서 최적입니다. 서비스의 설계자가 svc_run() (을)를 호출하지 않고, 비동기의 이벤트 처리를 실시하는 경우에만 중요합니다. 이 변수는 읽어들여 전용입니다만 (주소를 select(2) 에 건네주지 않습니다만), svc_getreqset() 인가 작성 routine를 호출한 다음에 변경할 수 있습니다. FD_SETSIZE, (을)를 넘는 기술자의 제한이 프로세스에 있는 경우, 이 변수는 FD_SETSIZE 기술자로 밖에 사용할 수 없는 것에 주의해 주세요.

    int svc_fds;

    svc_fdset (을)를 닮아 있습니다만, 32 개의 기술자에게 제한되고 있습니다. 이 인터페이스는 svc_fdset 그리고 옮겨놓을 수 있었습니다.

    bool_t svc_freeargs(SVCXPRT *xprt, xdrproc_t inproc, char *in)

    RPC/XDR 시스템이 svc_getargs() (을)를 사용해 인수를 서비스 프로시저에 디코드했을 경우에 할당한 데이터를 해방하는 매크로입니다. 이 routine는, 결과가 문제 없게 해방되면(자) 1 을 되돌려, 문제가 발생했을 경우는 0 을 되돌립니다.

    bool_t svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, char *in)

    RPC 서비스 전송 핸들 xprt RPC 요구의 인수를 디코드하는 매크로입니다. 파라미터 in (은)는, 인수를 배치하는 장소의 주소입니다. inproc (은)는, 인수를 디코드한다 XDR routine입니다. 이 routine는, 디코드로 문제가 발생하지 않으면 1 을 되돌려, 문제가 발생했을 경우는 0 을 되돌립니다.

    struct sockaddr_in *
    svc_getcaller(SVCXPRT *xprt)

    RPC 서비스 전송 핸들 xprt 에 관련하는 프로시저의 호출측의 네트워크 주소를 입수하는 확실한 방법입니다.

    void svc_getreqset(fd_set *rdfds)

    이 routine는, 서비스의 설계자가 svc_run() (을)를 호출하지 않고, 독자적인 비동기 이벤트 처리를 실현하는 경우에게만 중요합니다. RPC 요구가 RPC 소켓에 도착했다고 select(2) 시스템 콜이 판단했을 경우에 불려 갑니다. rdfds (은)는, 작성된 읽기 기술자 비트 마스크입니다. 이 routine는, rdfds 의 값에 관련한 모든 소켓 서비스를 받았을 경우로 돌아옵니다.

    void svc_getreq(int rdfds)

    svc_getreqset(), (을)를 닮아 있습니다만, 32 개의 기술자에게 제한되고 있습니다. 이 인터페이스는 svc_getreqset() 그리고 옮겨놓을 수 있었습니다.

    bool_t svc_register(SVCXPRT *xprt, u_long prognum, u_long versnum, void (*dispatch)(struct svc_req *, SVCXPRT *), int protocol)

    prognum (와)과 versnum (을)를 서비스디스팟치프로시쟈 dispatch() 에 관련짓습니다. protocol 하지만 0 인 경우, 서비스는 portmap(8) 서비스로 등록되지 않습니다. protocol 하지만 0 이외인 경우, (prognum, versnum, protocol) 의 3 개(살)과 xprt->xp_port 의 매핑이 로컬 portmap(8) 서비스로 확립됩니다 (일반적으로 protocol (은)는 0 인가 IPPROTO_UDP 인가 IPPROTO_TCP 입니다). 프로시저 dispatch() 의 형식은 이하와 같습니다.

    bool_t() dispatch(struct svc_req *request, SVCXPRT *xprt)

    svc_register() routine는, 문제가 없으면 1 을 되돌려, 문제가 있는 경우는 0 을 되돌립니다.

    svc_run()

    이 routine는 돌아오지 않습니다. RPC 요구의 도착을 기다려, 도착하면(자) svc_getreq() (을)를 사용해 적절한 서비스 프로시저를 호출합니다. 통상의 경우, 이 프로시저는, select(2) 시스템 콜이 돌아오는 것을 기다립니다.

    bool_t svc_sendreply(SVCXPRT *xprt, xdrproc_t outproc, char *out)

    RPC 서비스의 디스팟치르틴으로 불려 가 리모트 프로듀서 콜의 결과를 송신합니다. 파라미터 xprt (은)는 요구의 관련 전송 핸들입니다. outproc (은)는, 결과의 encode에 사용한다 XDR routine입니다. out (은)는 결과의 주소입니다. 이 routine는, 문제가 없으면 1 을 되돌려, 문제가 있는 경우는 0 을 되돌립니다.

    void
    svc_unregister(u_long prognum, u_long versnum)

    (prognum, versnum) 의 2 개(살)과 디스팟치르틴의 매핑, 및 (prognum, versnum, *) 의 3 개(살)과 포트 번호의 매칭을 모두 삭제합니다.

    void
    svcerr_auth(SVCXPRT *xprt, enum auth_stat why)

    인증 에러를 위해서(때문에), 리모트 프로듀서 콜의 실행을 거부한다 서비스디스팟치르틴이 호출합니다.

    void
    svcerr_decode(SVCXPRT *xprt)

    파라미터를 문제 없게 디코드할 수 없다 서비스디스팟치르틴이 호출합니다. svc_getargs() 도 참조해 주세요.

    void
    svcerr_noproc(SVCXPRT *xprt)

    호출측이 요구한 프로시저 번호를 실현되지 않는 서비스디스팟치르틴이 호출합니다.

    void
    svcerr_noprog(SVCXPRT *xprt)

    목적의 프로그램이 RPC 패키지로 등록되지 않은 경우에 불려 갑니다. 서비스의 설계자에게는, 통상의 경우 이 routine는 필요 없습니다.

    void
    svcerr_progvers(SVCXPRT *xprt, u_long low_vers, u_long high_vers)

    프로그램의 목적의 버젼이 RPC 패키지로 등록되지 않은 경우에 불려 갑니다. 서비스의 설계자에게는, 통상의 경우 이 routine는 필요 없습니다.

    void
    svcerr_systemerr(SVCXPRT *xprt)

    서비스디스팟치르틴이, 특정 프로토콜로 커버되어 있지 않은 시스템 우류를 검출했을 경우에 호출합니다. 예를 들어 서비스가 기억역을 할당할 수 없는 경우는, 이 routine가 불려 갑니다.

    void
    svcerr_weakauth(SVCXPRT *xprt)

    인증 파라미터가 부족하기 위해(때문에), 리모트 프로듀서 콜의 실행을 거부한다 서비스디스팟치르틴이 호출합니다. 이 routine는, svcerr_auth(xprt, AUTH_TOOWEAK) (을)를 호출합니다.

    SVCXPRT *
    svcraw_create(void)

    포인터를 되돌리기 위한 토이 RPC 클라이언트를 작성합니다. 실제의 트랜스폴트는, 프로세스의 주소 스페이스내에 있는 버퍼이므로, 대응한다 RPC 클라이언트는 같은 주소 스페이스에 존재할 필요가 있습니다. clntraw_create() (을)를 참조해 주세요. 이 routine에 의해, RPC 의 시뮬레이션, 및 왕복 여행 타임 등, RPC 오버헤드의 취득을 커널의 간섭없이 실행할 수 있습니다. 이 routine는, 에러가 발생하면(자) NULL (을)를 되돌립니다.

    SVCXPRT *
    svctcp_create(int sock, u_int send_buf_size, u_int recv_buf_size)

    포인터를 되돌리는, TCP/IP 베이스의 RPC 서비스 트랜스폴트를 작성합니다. 트랜스폴트에는 소켓 sock 하지만 관련합니다. 소켓이 RPC_ANYSOCK 인 경우는, 새로운 소켓이 작성됩니다. 소켓이 로컬 TCP 포트에 결합하고 있지 않는 경우, 이 routine는 소켓을 임의의 포트에 결합합니다. 처리가 끝나면(자), xprt->xp_sock (은)는 트랜스폴트의 소켓 기술자가 되어, xprt->xp_port (은)는 트랜스폴트의 포트 번호가 됩니다. 이 routine는, 에러가 발생하면(자) NULL (을)를 되돌립니다. TCP 베이스의 RPC (은)는 버퍼에 의한다 I/O (을)를 사용하므로, 유저는 버퍼 사이즈를 지정할 수 있습니다. 값을 0 으로 하면(자), 적절한 디폴트가 선택됩니다.

    SVCXPRT *
    svcfd_create(int fd, u_int sendsize, u_int recvsize)

    열려 있는 기술자의 최상정도에 서비스를 작성합니다. 일반적으로 이 기술자는, TCP 등의 스트림 프로토콜의 접속이 끝난 소켓입니다. sendsize (와)과 recvsize (은)는, 송신 버퍼와 수신 버퍼의 사이즈를 지정합니다. 이 사이즈가 0 인 경우는, 적절한 디폴트가 선택됩니다.

    SVCXPRT *
    svcudp_bufcreate(int sock, u_int sendsize, u_int recvsize)

    포인터를 되돌린다 UDP/IP 베이스의 RPC 서비스 트랜스폴트를 작성합니다. 트랜스폴트에는 소켓 sock 하지만 관련합니다. 소켓이 RPC_ANYSOCK 인 경우는, 새로운 소켓이 작성됩니다. 소켓이 로컬 UDP 포트에 결합하고 있지 않는 경우, 이 routine는 소켓을 임의의 포트에 결합합니다. 처리가 끝나면(자), xprt->xp_sock (은)는 트랜스폴트의 소켓 기술자가 되어, xprt->xp_port (은)는 트랜스폴트의 포트 번호가 됩니다. 이 routine는, 에러가 발생하면(자) NULL (을)를 되돌립니다.

    이것에 의해, 유저는, UDP 베이스의 송신 RPC 메세지와 수신 메세지의 최대 패킷 사이즈를 지정할 수 있습니다.

    bool_t xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar)

    RPC 응답 메세지의 encode에 사용합니다. 이 routine에서는, RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *aupp)

    UNIX 증명서의 기술에 사용합니다. 이 routine는, RPC 인증 패키지를 사용하지 않고 , 증명서를 작성하는 경우에 편리합니다.

    void
    bool_t xdr_callhdr(XDR *xdrs, struct rpc_msg *chdr)

    RPC 콜 헤더 메세지의 기술에 사용합니다. 이 routine에서는, RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg)

    RPC 콜 메세지의 기술에 사용합니다. 이 routine는, RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap)

    RPC 인증 정보 메세지의 기술에 사용합니다. 이 routine에서는, RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    struct pmap;
    bool_t xdr_pmap(XDR *xdrs, struct pmap *regs)

    다양한 portmap(8) 프로시저의 파라미터의 기술에 외부적으로 사용합니다. 이 routine는, pmap_*() 인터페이스를 사용하지 않고 , 이 파라미터를 작성하는 경우에 편리합니다.

    bool_t xdr_pmaplist(XDR *xdrs, struct pmaplist **rp)

    포트 매핑의 리스트의 기술에 외부적으로 사용합니다. 이 routine는, pmap_*() 인터페이스를 사용하지 않고 , 이 파라미터를 작성하는 경우에 편리합니다.

    bool_t xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr)

    RPC 응답 메세지의 기술에 사용합니다. 이 routine는 RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)

    RPC 응답 메세지의 기술에 사용합니다. 이 routine는 RPC 패키지를 사용하지 않고 , RPC 스타일의 메세지를 작성하는 경우에 편리합니다.

    void
    xprt_register(SVCXPRT *xprt)

    RPC 서비스 트랜스폴트 핸들이 작성되면(자), RPC 서비스 패키지로 등록할 필요가 있습니다. 이 routine는, 글로벌 변수 svc_fds (을)를 수정합니다. 서비스의 설계자에게는, 통상의 경우 이 routine는 필요 없습니다.

    void
    xprt_unregister(SVCXPRT *xprt)

    RPC 서비스 트랜스폴트 핸들을 파괴하기 전에는, RPC 서비스 패키지로 등록을 해제할 필요가 있습니다. 이 routine는, 글로벌 변수 svc_fds (을)를 수정합니다. 서비스의 설계자에게는, 통상의 경우 이 routine는 필요 없습니다.

관련 항목
rpc_secure(3), xdr(3) 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.