Rechercher une page de manuel
rpc
Langue: ja
Version: 2007-05-18 (openSuse - 09/10/07)
Section: 3 (Bibliothèques de fonctions)
Sommaire
̾Á°
rpc - ±ó³Ö¼ê³¤¸Æ¤Ó½Ð¤·(RPC)¤Î¤¿¤á¤Î¥é¥¤¥Ö¥é¥ê¡¦¥ë¡¼¥Æ¥£¥ó½ñ¼°¤ÈÀâÌÀ
¤³¤ì¤é¤Î¥ë¡¼¥Æ¥£¥ó¤Ï C ¥×¥í¥°¥é¥à¤Ç¥Í¥Ã¥È¥ï¡¼¥¯¤òÄ̤·¤Æ ¾¤Î¥Þ¥·¥ó¤Ë¥¢¥¯¥»¥¹¤¹¤ë¥×¥í¥·¥¸¥ã¤òºîÀ®¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¡£ ºÇ½é¤Ë¥¯¥é¥¤¥¢¥ó¥È¤Ï¥Ç¡¼¥¿¥Ñ¥±¥Ã¥È¤ò¥µ¡¼¥Ð¤ËÁ÷¤ë¤¿¤á¤Ë ¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¡£ ¥µ¡¼¥Ð¤Ï¥Ñ¥±¥Ã¥È¤ò¼õ¤±¼è¤ë¤È¡¢ÇÛʬ¥ë¡¼¥Á¥ó¤ò¸Æ¤Ó½Ð¤·¤Æ Í׵ᤵ¤ì¤¿¥µ¡¼¥Ó¥¹¤Ë¼Â¹Ô¤·¡¢ÊÖÅú¤òÁ÷¤êÊÖ¤¹¡£ ºÇ¸å¤Ë¥×¥í¥·¥¸¥ã¡¦¥³¡¼¥ë¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ø¤ÈÌá¤ë¡£#include <rpc/rpc.h>
void auth_destroy(auth) AUTH *auth;
- ¤³¤Î¥Þ¥¯¥í¤Ï auth ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿Ç§¾Ú¾ðÊó¤òÇ˲õ¤¹¤ë¡£Ç˲õ¤ÏÄ̾ï¤Ï»äŪ¤Ê¥Ç¡¼¥¿¹½Â¤¤Î ÇË´þ¤ò´Þ¤ó¤Ç¤¤¤ë¡£ auth_destroy() ¤ò¸Æ¤Ó½Ð¤·¤¿¸å¤Ë auth ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£
AUTH * authnone_create()
- ³Æ¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¡¦¥³¡¼¥ë¤Ç»ÈÍѤǤ¤Ê¤¤²¾¤Îǧ¾Ú¾ðÊó¤È¤·¤ÆÅϤµ¤ì¤ë RPC ǧ¾Ú¥Ï¥ó¥É¥ë¤òºîÀ®¤·¤ÆÊÖ¤¹¡£¤³¤ì¤Ï RPC ¤Ç»ÈÍѤµ¤ì¤ë¥Ç¥Õ¥©¥ë¥È¤Îǧ¾Ú¤Ç¤¢¤ë¡£
AUTH * authunix_create(host, uid, gid, len, aup_gids) char *host; int uid, gid, len, *aup.gids;
- ǧ¾Ú¾ðÊó¤ò´Þ¤ó¤À RPC ǧ¾Ú¥Ï¥ó¥É¥ë¤òºîÀ®¤·¤ÆÊÖ¤¹¡£ host ¥Ñ¥é¥á¡¼¥¿¡¼¤Ï¾ðÊ󤬺îÀ®¤µ¤ì¤¿¥Þ¥·¥ó¤Î̾Á°¤Ç¤¢¤ë¡£ uid ¤Ï¤½¤Î¥æ¡¼¥¶¤Î¥æ¡¼¥¶ ID ¡¢ gid ¤Ï¤½¤Î¥æ¡¼¥¶¤Î¸½ºß¤Î¥°¥ë¡¼¥× ID ¤Ç¤¢¤ë¡£ len ¤È aup_gids ¤Ï¤½¤Î¥æ¡¼¥¶¤¬½ê°¤¹¤ë¥°¥ë¡¼¥×¤ÎÇÛÎó¤ò»²¾È¤·¤Æ¤¤¤ë¡£ ¾¤Î¥æ¡¼¥¶¤Ë¤Ê¤ê¤¹¤Þ¤¹¤³¤È¤Ï´Êñ¤Ç¤¢¤ë¡£
AUTH * authunix_create_default()
- ŬÀڤʥѥé¥á¡¼¥¿¡¼¤Ç authunix_create() ¤ò¸Æ¤Ó½Ð¤¹¡£
callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out) char *host; u_long prognum, versnum, procnum; char *in, *out; xdrproc_t inproc, outproc;
- ¥Þ¥·¥ó host ¾å¤Ç prognum, versnum, procnum ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¡£ ¥Ñ¥é¥á¡¼¥¿¡¼ in ¤Ï¥×¥í¥·¥¸¥ã¤Î°ú¤¿ô¤Î¥¢¥É¥ì¥¹¤Ç¤¢¤ê out ¤Ï·ë²Ì¤ò³ÊǼ¤¹¤ë¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£ inproc ¤Ï¥×¥í¥·¥¸¥ã¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¡¢ outproc ¤Ï·ë²Ì¤ò¥Ç¥³¡¼¥É¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï enum clnt_stat ¤òÀ°¿ô¤Ë¥¥ã¥¹¥È¤·¤¿ÃͤòÊÖ¤¹¡£ clnt_perrno() ¥ë¡¼¥Æ¥£¥ó¤¬¼ºÇԤξõÂÖ¤ò¥á¥Ã¥»¡¼¥¸¤ËÊÑ´¹¤¹¤ë¤Î¤Ë»ÈÍѤǤ¤ë¡£
- ·Ù¹ð: ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ç¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¤ÈÄÌ¿®¤Ë¤Ï UDP/IP ¤¬»ÈÍѤµ¤ì¤ë¡£¤³¤ÎºÝ¤ÎÀ©¸Â¤Ë¤Ä¤¤¤Æ¤Ï clntudp_create() ¤ò»²¾È¤¹¤ë¤³¤È¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ò»ÈÍѤ·¤Æǧ¾Ú¤ä»þ´ÖÀÚ¤ì¤ÎÀ©¸æ¤ò ¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£
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;
- callrpc() ¤ÈƱÍͤǤ¢¤ë¤¬¡¢¥á¥Ã¥»¡¼¥¸¤¬¥í¡¼¥«¥ë¤Î¥Ö¥í¡¼¥É¥¥ã¥¹¥È¡¦¥Í¥Ã¥È¥ï¡¼¥¯ Á´ÂÎ¤Ø¤È¥Ö¥í¡¼¥É¥¥ã¥¹¥È¤µ¤ì¤ëÅÀ¤¬°Û¤Ã¤Æ¤¤¤ë¡£²óÅú¤ò¼õ¤±¼è¤ëÅÙ¤Ë ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï°Ê²¼¤Î·Á¼°¤Î eachresult() ¤ò¸Æ¤Ó½Ð¤¹¡£
-
-
eachresult(out, addr) char *out; struct sockaddr_in *addr;
-
- ¤³¤³¤Ç out ¤Ï clnt_broadcast() ¤ËÅϤµ¤ì¤ë out ¤ÈƱ¤¸¤Ç¤¢¤ë¤¬¡¢¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¤«¤é¤Î½ÐÎϤ¬¥Ç¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë ÅÀ¤Î¤ß¤¬°Û¤Ã¤Æ¤¤¤ë¡£ addr ¤Ï·ë²Ì¤òÁ÷¤Ã¤ÆÍ褿¥Þ¥·¥ó¤Î¥¢¥É¥ì¥¹¤ò»Ø¤·¤Æ¤¤¤ë¡£ eachresult() ¤¬¥¼¥í¤òÊÖ¤·¤¿¾ì¹ç¡¢ clnt_broadcast() ¤Ï¤µ¤é¤Ê¤ë²óÅú¤òÂԤġ£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐŬÀڤʾõÂ֤ǽªÎ»¤¹¤ë¡£
- ·Ù¹ð: ¥Ö¥í¡¼¥É¥¥ã¥¹¥È¡¦¥½¥±¥Ã¥È¤Ï¥Ç¡¼¥¿¥ê¥ó¥¯ÁؤκÇÂçžÁ÷ñ°Ì¤Ë À©¸Â¤µ¤ì¤Æ¤¤¤ë¡£¥¤¡¼¥µ¥Í¥Ã¥È¤Î¾ì¹ç¡¢ºÇÂçÃÍ¤Ï 1500 ¥Ð¥¤¥È¤Ç¤¢¤ë¡£
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;
- ¤³¤Î¥Þ¥¯¥í¤Ï¥¯¥é¥¤¥¢¥ó¥È¡¦¥Ï¥ó¥É¥ë clnt ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ procnum ¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¡£ ¥¯¥é¥¤¥¢¥ó¥È¡¦¥Ï¥ó¥É¥ë¤Ï clnt_create() ¤Î¤è¤¦¤Ê RPC ¥¯¥é¥¤¥¢¥ó¥ÈºîÀ®¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤ÆÆÀ¤é¤ì¤ë¡£ ¥Ñ¥¿¥á¡¼¥¿ in ¤Ï¥×¥í¥·¥¸¥ã¤Î°ú¤¿ô¤Î¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£ out ¤Ï¥×¥í¥·¥¸¥ã¤ÎÊÖ¤êÃͤò³ÊǼ¤¹¤ë¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£ inproc ¤Ï¥×¥í¥·¥¸¥ã¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ outproc ¤Ï¥×¥í¥·¥¸¥ã¤ÎÊÖ¤êÃͤò¥Ç¥³¡¼¥É¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ tout ¤Ï·ë²Ì¤¬ÊÖ¤µ¤ì¤ë¤Î¤òÂԤĻþ´Ö¤Ç¤¢¤ë¡£
clnt_destroy(clnt) CLIENT *clnt;
- ¤³¤Î¥Þ¥¯¥í¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î RPC ¥Ï¥ó¥É¥ë¤òÇ˲õ¤¹¤ë¡£Ç˲õ¤Ë¤ÏÄ̾ï¤Ï clnt ¼«¿È¤â´Þ¤á¤Æ»äŪ¤Ê¥Ç¡¼¥¿¹½Â¤ÂΤÎÇË´þ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¡£ clnt_destroy() ¤Î¸Æ¤Ó½Ð¤·¤Î¸å¤Ë clnt ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£ RPC ¥é¥¤¥Ö¥é¥ê¤¬´ØÏ¢¤¹¤ë¥½¥±¥Ã¥È¤ò¥ª¡¼¥×¥ó¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ ¤½¤ì¤âÊĤ¸¤é¤ì¤ë¡£¤½¤ì°Ê³°¤Î¾ì¹ç¤Ë¤Ï¥½¥±¥Ã¥È¤Ï¥ª¡¼¥×¥ó¤µ¤ì¤¿¤Þ¤Þ¤Ç¤¢¤ë¡£
CLIENT * clnt_create(host, prog, vers, proto) char *host; u_long prog, vers; char *proto;
- °ìÈÌŪ¤Ê¥¯¥é¥¤¥¢¥ó¥È¤ÎºîÀ®¥ë¡¼¥Æ¥£¥ó¤Ç¤¢¤ë¡£ host ¤Ï¥µ¡¼¥Ð¤Î¤¢¤ë¥ê¥â¡¼¥È¥Û¥¹¥È¤Î̾Á°¤ò»ØÄꤹ¤ë¡£ proto ¤É¤Î¤è¤¦¤ÊÄÌ¿®¥×¥í¥È¥³¥ë¤ò»ÈÍѤ¹¤ë¤«¤ò»ØÄꤹ¤ë¡£¸½ºß¤³¤³¤Ë »ÈÍѤǤ¤ëÃÍ¤Ï "udp" ¤È "tcp" ¤Ç¤¢¤ë¡£ ¥Ç¥Õ¥©¥ë¥È¤Î»þ´ÖÀڤ줬ÀßÄꤵ¤ì¤ë¤¬¡¢ clnt_control() ¤ò»ÈÍѤ·¤ÆÊѹ¹²Äǽ¤Ç¤¢¤ë¡£
- ·Ù¹ð: UDP ¤ò»ÈÍѤ·¤¿¾ì¹ç¤Ë¤Ï·çÅÀ¤¬¤¢¤ë¡£ UDP ¤Ë´ð¤Å¤¤¤¿ RPC ¥á¥Ã¥»¡¼¥¸¤ÏºÇÂç¤Ç¤â 8 KByte ¤Î¥¨¥ó¥³¡¼¥É¥Ç¡¼¥¿¤·¤«ÊÝ»ý¤¹¤ë ¤³¤È¤¬¤Ç¤¤Ê¤¤¤¿¤á¡¢Â礤ʰú¤¿ô¤äµðÂç¤Ê·ë²Ì¤ò¼è¤ë¥×¥í¥·¥¸¥ã¤Ë ¤Ï»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£
bool_t clnt_control(cl, req, info) CLIENT *cl; char *info;
- ¤³¤Î¥Þ¥¯¥í¤Ï³Æ¼ï¥¯¥é¥¤¥¢¥ó¥È¤Ë¤Ä¤¤¤Æ¾ðÊó¤òÊѹ¹¤·¤¿¤ê¡¢¼èÆÀ¤·¤¿¤ê ¤¹¤ë¤Î¤Ë»ÈÍѤ¹¤ë¡£ req ¤ÏÁàºî¤Î¼ïÎà¤ò»ØÄꤹ¤ë¡£ info ¤Ï¾ðÊó¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤Ç¤¢¤ë¡£ UDP ¤È TCP ¤É¤Á¤é¤Î¾ì¹ç¤â»ÈÍѲÄǽ¤Ê req ¤ÎÃͤȡ¢¤½¤Î°ú¤¿ô¤Î·¿¡¢¤ª¤è¤Ó¤½¤ÎÆâÍƤϰʲ¼¤ÎÄ̤ê¤Ç¤¢¤ë:
-
CLSET_TIMEOUT struct timeval »þ´ÖÀÚ¤ì¤òÀßÄꤹ¤ëCLGET_TIMEOUTstruct timeval»þ´ÖÀÚ¤ì¤ò¼èÆÀ¤¹¤ë
- Ãí°Õ:
clnt_control() ¤ò»ÈÍѤ·¤Æ»þ´ÖÀÚ¤ì¤òÀßÄꤷ¤¿¾ì¹ç¤Ë¤Ï¤½¤ì°Ê¸å¤Ï clnt_call() ¤ËÅϤµ¤ì¤ë»þ´ÖÀÚ¤ì¥Ñ¥é¥á¡¼¥¿¡¼¤ÏÁ´¤Æ̵»ë¤µ¤ì¤ë¡£ -
CLGET_SERVER_ADDR struct sockaddr_in ¥µ¡¼¥Ð¥¢¥É¥ì¥¹¤ò¼èÆÀ¤¹¤ë
- °Ê²¼¤ÎÁàºî¤Ï
UDP ¤Î¾ì¹ç¤Ë¤Î¤ß͸ú¤Ç¤¢¤ë: -
CLSET_RETRY_TIMEOUT struct timeval ºÆÁ÷´Ö³Ö¤òÀßÄꤹ¤ëCLGET_RETRY_TIMEOUTstruct timevalºÆÁ÷´Ö³Ö¤ò¼èÆÀ¤¹¤ë
- ºÆÁ÷´Ö³Ö¤Ï¼¡¤ËÍ×µá¤òºÆÁ÷¤¹¤ëÁ°¤Ë
UDP RPC ¤¬¥µ¡¼¥Ð¤Î²óÅú¤òÂԤĻþ´Ö¤Ç¤¢¤ë¡£
clnt_freeres(clnt, outproc, out) CLIENT *clnt; xdrproc_t outproc; char *out;
- ¤³¤Î¥Þ¥¯¥í¤Ï RPC ¸Æ¤Ó½Ð¤·¤Î·ë²Ì¤Î¥Ç¥³¡¼¥É¤ÎºÝ¤Ë RPC/XDR ¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ³äÅö¤Æ¤é¤ì¤¿¥Ç¡¼¥¿¤ò²òÊü¤¹¤ë¡£ ¥Ñ¥é¥á¡¼¥¿¡¼ out ¤Ï·ë²Ì¤Î¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£ outproc ¤Ï·ë²Ì¤òµ½Ò¤·¤Æ¤¤¤ë XDR ¥ë¡¼¥Æ¥£¥ó¤Ç¤¢¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï·ë²Ì¤Î²òÊü¤ËÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï 1 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£
void clnt_geterr(clnt, errp) CLIENT *clnt; struct rpc_err *errp;
- ¤³¤Î¥Þ¥¯¥í¤Ï¥¯¥é¥¤¥¢¥ó¥È¡¦¥Ï¥ó¥É¥ë¤Î¥¨¥é¡¼¹½Â¤ÂΤò errp ¥¢¥É¥ì¥¹¤Ç»ØÄꤵ¤ì¤¿¹½Â¤ÂΤإ³¥Ô¡¼¤¹¤ë¡£
void clnt_pcreateerror(s) char *s;
- ɸ½à¥¨¥é¡¼½ÐÎϤˡ¢¤Ê¤¼¥¯¥é¥¤¥¢¥ó¥È RPC ¥Ï¥ó¥É¥ë¤ÎºîÀ®¤¬¤Ç¤¤Ê¤«¤Ã¤¿¤«¤Ë¤Ä¤¤¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£ ¥á¥Ã¥»¡¼¥¸¤ÎÁ°¤Ëʸ»úÎó s ¤È¥³¥í¥ó(:)¤¬É½¼¨¤µ¤ì¤ë¡£ clnt_create(), clntraw_create(), clnttcp_create(), clntudp_create() ¤Î¸Æ¤Ó½Ð¤·¤¬¼ºÇÔ¤·¤¿»þ¤Ë»ÈÍѤ¹¤ë¤³¤È¡£
void clnt_perrno(stat) enum clnt_stat stat;
- ɸ½à¥¨¥é¡¼½ÐÎÏ¤Ë stat ¤Ë¤è¤Ã¤Æ»Ø¼¨¤µ¤ì¤ë¥¨¥é¡¼¾õÂÖ¤ËÂбþ¤¹¤ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£ callrpc() ¤Î¸å¤Ë»ÈÍѤ¹¤ë¤³¤È¡£
clnt_perror(clnt, s) CLIENT *clnt; char *s;
- ɸ½à¥¨¥é¡¼½ÐÎϤˡ¢¤Ê¤¼ RPC ¸Æ¤Ó½Ð¤·¤¬¼ºÇÔ¤·¤¿¤«¤Ë¤Ä¤¤¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£ clnt ¤Ï¥³¡¼¥ë¤Ë»ÈÍѤ·¤¿¥Ï¥ó¥É¥ë¤Ç¤¢¤ë¡£ ¥á¥Ã¥»¡¼¥¸¤ÎÁ°¤Ëʸ»úÎó s ¤È¥³¥í¥ó(:)¤¬É½¼¨¤µ¤ì¤ë¡£ clnt_call() ¤¬¼ºÇÔ¤·¤¿¸å¤Ë»ÈÍѤ¹¤ë¤³¤È¡£
char * clnt_spcreateerror char *s;
- clnt_pcreateerror() ¤ÈƱÍͤǤ¢¤ë¤¬¡¢É¸½à¥¨¥é¡¼½ÐÎϤØɽ¼¨¤¹¤ë¤«¤ï¤ê¤Ëʸ»úÎó¤òÊÖ¤¹ÅÀ¤¬°Û¤Ã¤Æ¤¤¤ë¡£
- ¥Ð¥°: ÀÅŪ¤ÊÎΰè¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¤¿¤á¡¢¸Æ¤Ó½Ð¤·¤´¤È¤Ë¾å½ñ¤¤µ¤ì¤ë¡£
char * clnt_sperrno(stat) enum clnt_stat stat;
- clnt_perrno() ¤ÈƱ¤¸°ú¤¿ô¤ò¼è¤ë¤¬¡¢¤Ê¤¼ RPC ¸Æ¤Ó½Ð¤·¤¬¼ºÇÔ¤·¤¿¤«¤Ë¤Ä¤¤¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òɸ½à¥¨¥é¡¼½ÐÎϤËɽ¼¨¤¹¤ë ¤«¤ï¤ê¤Ë¡¢¥á¥Ã¥»¡¼¥¸¤ò³ÊǼ¤·¤Æ¤¤¤ëʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£ ʸ»úÎó¤Ï NEWLINE(²þ¹Ô) ¤Ç½ª¤Ã¤Æ¤¤¤ë¡£
- clnt_sperrno() ¤Ï¥×¥í¥°¥é¥à¤¬É¸½à¥¨¥é¡¼½ÐÎϤò»ý¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç(¥×¥í¥°¥é¥à¤¬¥µ¡¼¥Ð¤È¤· ¤ÆÁö¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¤è¤¯¤¢¤ê¤¨¤ë)¤ä¡¢¥×¥í¥°¥é¥Þ¡¼¤¬¥á¥Ã¥»¡¼¥¸¤ò printf() ¤Ç½ÐÎϤ¹¤ë¤³¤È¤ò˾¤Þ¤Ê¤¤¾ì¹ç¤ä¡¢¥á¥Ã¥»¡¼¥¸¤Î·Á¼°¤¬ clnt_perrno() ¤¬¥µ¥Ý¡¼¥È¤¹¤ë¤â¤Î¤È¤Ï°Û¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ê¤É¤Ë clnt_perrno() ¤Î¤«¤ï¤ê¤Ë»ÈÍѤµ¤ì¤ë¡£ Ãí°Õ: clnt_sperror() ¤ä clnt_spcreaterror() ¤È¤Ï°ã¤Ã¤Æ clnt_sperrno() ¤ÏÀÅŪ¥Ç¡¼¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£¤·¤«¤·¸Æ¤Ó½Ð¤·¤´¤È¤Ë¾å½ñ¤¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡£
char * clnt_sperror(rpch, s) CLIENT *rpch; char *s;
- clnt_perror() ¤ÈƱÍͤǤ¢¤ë¤¬¡¢É¸½à¥¨¥é¡¼½ÐÎϤËɽ¼¨¤¹¤ëÂå¤ê¤Ë (clnt_sperrno() ¤Î¤è¤¦¤Ë) ʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹ÅÀ¤¬°Û¤Ã¤Æ¤¤¤ë¡£
- ¥Ð¥°: ¸Æ¤Ó½Ð¤·¤´¤È¤Ë¾å½ñ¤¤µ¤ì¤ëÀÅŪ¥Ç¡¼¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£
CLIENT * clntraw_create(prognum, versnum) u_long prognum, versnum;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum ¤Î¤¿¤á¤Îµ¼»÷ RPC ¥¯¥é¥¤¥¢¥ó¥È¤òºîÀ®¤¹¤ë¡£¥á¥Ã¥»¡¼¥¸¤ò¥µ¡¼¥Ó¥¹¤ËÅϤ¹¤¿¤á¤Ë»ÈÍѤ¹¤ë ÄÌ¿®¤Ï¼ÂºÝ¤Ë¤Ï¤½¤Î¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë¤¢¤ë¥Ð¥Ã¥Õ¥¡¡¼¤Ç¤¢¤ë¡£ ¤½¤ì¤Ç¡¢Âбþ¤¹¤ë RPC ¥µ¡¼¥Ð¤¬Æ±¤¸¥¢¥É¥ì¥¹¶õ´Ö¤ÎÃæ¤Ë¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ svcraw_create() ¤ò»²¾È¤¹¤ë¤³¤È¡£ ¤³¤ì¤Ë¤è¤ê RPC ¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¤ä¡¢¥«¡¼¥Í¥ë¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë±Æ¶Á¤µ¤ì¤º¤Ë±þÅú»þ´Ö¤Ê¤É¤Î RPC ¥ª¡¼¥Ð¥Ø¥Ã¥É¤Î³ÍÆÀ¤¬¤Ç¤¤ë¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï NULL ¤òÊÖ¤¹¡£
CLIENT * clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz) struct sockaddr_in *addr; u_long prognum, versnum; int *sockp; u_int sendsz, recvsz;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum ¤Î¤¿¤á¤Î RPC ¥¯¥é¥¤¥¢¥ó¥È¤òºîÀ®¤¹¤ë¡£¥¯¥é¥¤¥¢¥ó¥È¤ÏÄÌ¿®¤Ë TCP/IP ¤ò»ÈÍѤ¹¤ë¡£¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡¦¥¢¥É¥ì¥¹¤Î *addr ¤Ë¤¢¤ë¡£ addr->sin_port ¤¬¥¼¥í¤Ê¤é¤Ð¡¢¼ÂºÝ¤Ë¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤¬ listen ¤·¤Æ¤¤¤ë¥Ý¡¼¥È¤¬ÀßÄꤵ¤ì¤ë¡£(¤³¤Î¾ðÊó¤Î¤¿¤á¤Ë¥ê¥â¡¼¥È¤Î portmap ¥µ¡¼¥Ó¥¹¤¬ÍøÍѤµ¤ì¤ë¡£) ¥Ñ¥é¥á¡¼¥¿¡¼ sockp ¤Ï¥½¥±¥Ã¥È¤Ç¤¢¤ë¡£¤â¤·¤³¤ì¤¬ RPC_ANYSOCK ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬¿·¤·¤¤¥½¥±¥Ã¥È¤ò¥ª¡¼¥×¥ó¤·¤Æ sockp ¤ËÀßÄꤹ¤ë¡£ TCP ¤Ë´ð¤Å¤¤¤¿ RPC ¤Ï¥Ð¥Ã¥Õ¥¡¤µ¤ì¤¿ I/O ¤ò»ÈÍѤ¹¤ë¤¿¤á¡¢¥æ¡¼¥¶¤Ï¥Ñ¥é¥á¡¼¥¿¡¼ sendsz ¤È recvsz ¤ò»ÈÍѤ·¤ÆÁ÷¿®¥Ð¥Ã¥Õ¥¡¤È¼õ¿®¥Ð¥Ã¥Õ¥¡¤Î¥µ¥¤¥º¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¥¼¥í¤ò»ØÄꤷ¤¿¾ì¹ç¤Ë¤ÏŬÀڤʥǥե©¥ë¥È¤¬ÁªÂò¤µ¤ì¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤òÊÖ¤¹¡£
CLIENT * clntudp_create(addr, prognum, versnum, wait, sockp) struct sockaddr_in *addr; u_long prognum, versnum; struct timeval wait; int *sockp;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum ¤Î¤¿¤á¤Î RPC ¥¯¥é¥¤¥¢¥ó¥È¤òºîÀ®¤¹¤ë¡£¥¯¥é¥¤¥¢¥ó¥È¤ÏÄÌ¿®¤Ë UDP/IP ¤ò»ÈÍѤ¹¤ë¡£¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡¦¥¢¥É¥ì¥¹¤Î *addr ¤Ë¤¢¤ë¡£ addr->sin_port ¤¬¥¼¥í¤Ê¤é¤Ð¡¢¼ÂºÝ¤Ë¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤¬ listen ¤·¤Æ¤¤¤ë¥Ý¡¼¥È¤¬ÀßÄꤵ¤ì¤ë¡£(¤³¤Î¾ðÊó¤Î¤¿¤á¤Ë¥ê¥â¡¼¥È¤Î portmap ¥µ¡¼¥Ó¥¹¤¬ÍøÍѤµ¤ì¤ë¡£) ¥Ñ¥é¥á¡¼¥¿¡¼ sockp ¤Ï¥½¥±¥Ã¥È¤Ç¤¢¤ë¡£¤â¤·¤³¤ì¤¬ RPC_ANYSOCK ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬¿·¤·¤¤¥½¥±¥Ã¥È¤ò¥ª¡¼¥×¥ó¤·¤Æ sockp ¤ËÀßÄꤹ¤ë¡£ UDP ÄÌ¿®¤Ï²óÅú¤¬¤¢¤ë¤«¡¢»þ´ÖÀڤ줬µ¯¤³¤ë¤Þ¤Ç wait ´Ö³Ö¤Ç¸Æ¤Ó½Ð¤·¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤¹¤ë¡£»þ´ÖÀڤ줬µ¯¤³¤ë¤Þ¤Ç¤Î¹ç·×»þ´Ö¤Ï clnt_call() ¤Ç»ØÄꤹ¤ë¡£
- ·Ù¹ð: UDP ¤Ë´ð¤Å¤¤¤¿ RPC ¥á¥Ã¥»¡¼¥¸¤ÏºÇÂç¤Ç¤â 8 Kbyte ¤Þ¤Ç¤Î¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Ç¡¼¥¿¤·¤« ÊÝ»ý¤Ç¤¤Ê¤¤¤¿¤á¡¢¤³¤ÎÄÌ¿®¤ÏÂ礤ʰú¤¿ô¤äµðÂç¤Ê·ë²Ì¤ò¼è¤ë ¥×¥í¥·¥¸¥ã¤Ë¤Ï»ÈÍѤǤ¤Ê¤¤¡£
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;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum ¤Î¤¿¤á¤Î RPC ¥¯¥é¥¤¥¢¥ó¥È¤òºîÀ®¤¹¤ë¡£¥¯¥é¥¤¥¢¥ó¥È¤ÏÄÌ¿®¤Ë UDP/IP ¤ò»ÈÍѤ¹¤ë¡£¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡¦¥¢¥É¥ì¥¹¤Î *addr ¤Ë¤¢¤ë¡£ addr->sin_port ¤¬¥¼¥í¤Ê¤é¤Ð¡¢¼ÂºÝ¤Ë¥ê¥â¡¼¥È¡¦¥×¥í¥°¥é¥à¤¬ listen ¤·¤Æ¤¤¤ë¥Ý¡¼¥È¤¬ÀßÄꤵ¤ì¤ë¡£(¤³¤Î¾ðÊó¤Î¤¿¤á¤Ë¥ê¥â¡¼¥È¤Î portmap ¥µ¡¼¥Ó¥¹¤¬ÍøÍѤµ¤ì¤ë¡£) ¥Ñ¥é¥á¡¼¥¿¡¼ sockp ¤Ï¥½¥±¥Ã¥È¤Ç¤¢¤ë¡£¤â¤·¤³¤ì¤¬ RPC_ANYSOCK ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬¿·¤·¤¤¥½¥±¥Ã¥È¤ò¥ª¡¼¥×¥ó¤·¤Æ sockp ¤ËÀßÄꤹ¤ë¡£ UDP ÄÌ¿®¤Ï²óÅú¤¬¤¢¤ë¤«¡¢»þ´ÖÀڤ줬µ¯¤³¤ë¤Þ¤Ç wait ´Ö³Ö¤Ç¸Æ¤Ó½Ð¤·¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤¹¤ë¡£»þ´ÖÀڤ줬µ¯¤³¤ë¤Þ¤Ç¤Î¹ç·×»þ´Ö¤Ï clnt_call() ¤Ç»ØÄꤹ¤ë¡£
- ¤³¤ì¤ò»ÈÍѤ¹¤ë¤È UDP ¤Ë´ð¤Å¤¤¤¿ RPC ¥á¥Ã¥»¡¼¥¸¤Ë¤ª¤¤¤ÆÁ÷¿®¥Ñ¥±¥Ã¥È¤ä¼õ¿®¥Ñ¥±¥Ã¥È¤ÎºÇÂ祵¥¤¥º¤ò»ØÄꤹ¤ë¤³¤È ¤¬²Äǽ¤Ë¤Ê¤ë¡£
void get_myaddress(addr) struct sockaddr_in *addr;
- ¤³¤Î¥Þ¥·¥ó¤Î IP ¥¢¥É¥ì¥¹¤ò *addr ¤Ë³ÊǼ¤¹¤ë¡£ /etc/hosts ¤ò°·¤¦¥é¥¤¥Ö¥é¥ê¡¦¥ë¡¼¥Æ¥£¥ó¤Ï»ÈÍѤ·¤Ê¤¤¡£¥Ý¡¼¥ÈÈÖ¹æ¤Ï¾ï¤Ë htons(PMAPPORT) ¤ËÀßÄꤵ¤ì¤ë¡£
struct pmaplist * pmap_getmaps(addr) struct sockaddr_in *addr;
- portmap ¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤Î¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¢¤ê¡¢ IP ¥¢¥É¥ì¥¹ *addr ¤Ë¤¢¤ë¥Û¥¹¥È¤Î¸½ºß¤Î RPC ¥×¥í¥°¥é¥à¤«¤é¥Ý¡¼¥ÈÈÖ¹æ¤Ø¤Î¥Þ¥Ã¥Ô¥ó¥°¤Î°ìÍ÷¤òÊÖ¤¹¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬ NULL ¤òÊÖ¤¹¾ì¹ç¤â¤¢¤ë¡£ `rpcinfo -p' ¥³¥Þ¥ó¥É¤Ï¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¡£
u_short pmap_getport(addr, prognum, versnum, protocol) struct sockaddr_in *addr; u_long prognum, versnum, protocol;
- portmap ¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤Î¥æ¡¼¥¶¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¡¢ ¥×¥í¥°¥é¥àÈÖ¹æ prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum¡¢ ´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÄÌ¿®¥×¥í¥È¥³¥ë protocol ¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥µ¡¼¥Ó¥¹¤¬ÂԤäƤ¤¤ë¥Ý¡¼¥ÈÈÖ¹æ¤òÊÖ¤¹¡£ protocol ¤ÎÃͤϤۤȤó¤É¤Î¾ì¹ç IPPROTO_UDP ¤« IPPROTO_TCP ¤Ç¤¢¤ë¡£ÊÖ¤êÃÍ¥¼¥í¤Ï¥Þ¥Ã¥Ô¥ó¥°¤¬Â¸ºß¤·¤Ê¤¤¤«¡¢ RPC ¥·¥¹¥Æ¥à¤¬¥ê¥â¡¼¥È¤Î portmap ¥µ¡¼¥Ó¥¹¤Î»²¾È¤Ë¼ºÇÔ¤·¤¿¤³¤È¤ò°ÕÌ£¤¹¤ë¡£¸å¼Ô¤Î¾ì¹ç¤ÏÂç°èÊÑ¿ô rpc_createerr() ¤¬ 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;
- portmap ¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤Î¥æ¡¼¥¶¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¡¢ IP ¥¢¥É¥ì¥¹ *addr ¤Î¥Û¥¹¥È¤Î portmap ¤ò»²¾È¤·¤Æ¡¢ RPC ¸Æ¤Ó½Ð¤·¤òÀ¸À®¤·¡¢¤½¤Î¥Û¥¹¥È¾å¤Î¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¡£ ¥Ñ¥é¥á¡¼¥¿¡¼ *portp ¤Ï¥×¥í¥·¥¸¥ã¤¬À®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï¥×¥í¥°¥é¥à¤Î¥Ý¡¼¥ÈÈÖ¹æ¤Ë½¤Àµ¤µ¤ì¤ë¡£ ¾¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ÎÄêµÁ¤Ë¤Ä¤¤¤Æ¤Ï callrpc() ¤ä clnt_call() ¤ÇÀâÌÀ¤·¤Æ¤¢¤ë¡£ ¤³¤Î¥×¥í¥·¥¸¥ã¤Ï "ping" ¤Î¤ß¤Ë»ÈÍѤ¹¤Ù¤¤Ç¤¢¤ë¡£ clnt_broadcast() ¤â»²¾È¤¹¤ë¤³¤È¡£
pmap_set(prognum, versnum, protocol, port) u_long prognum, versnum, protocol; u_short port;
- portmap ¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤Î¥æ¡¼¥¶¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¡¢ [prognum,versnum,protocol] ¤ÎÁȤ߹ç¤ï¤»¤È port ¤È¤Î´Ö¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¡¢¤½¤Î¥Þ¥·¥ó¾å¤Î portmap ¥µ¡¼¥Ó¥¹¤ËÅÐÏ¿¤¹¤ë¡£ protocol ¤Ï¤Û¤È¤ó¤É¤Î¾ì¹ç IPPROTO_UDP ¤« IPPROTO_TCP ¤Î¤É¤Á¤é¤«¤Ç¤¢¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï 1 ¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£ svc_register() ¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
pmap_unset(prognum, versnum) u_long prognum, versnum;
- portmap ¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤Î¥æ¡¼¥¶¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¡¢ [prognum,versnum,*] ¤ÎÁȤ߹ç¤ï¤»¤È ports ¤Î´Ö¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¤½¤Î¥Þ¥·¥ó¾å¤Î portmap ¥µ¡¼¥Ó¥¹¤«¤éºï½ü¤¹¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ï 1 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï 0 ¤òÊÖ¤¹¡£
registerrpc(prognum, versnum, procnum, procname, inproc, outproc) u_long prognum, versnum, procnum; char *(*procname) () ; xdrproc_t inproc, outproc;
- RPC ¥µ¡¼¥Ó¥¹¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ·¤Æ procname ¥×¥í¥·¥¸¥ã¤òÅÐÏ¿¤¹¤ë¡£¥×¥í¥°¥é¥à prognum¡¢ ¥Ð¡¼¥¸¥ç¥ó versnum¡¢ ¥×¥í¥·¥¸¥ã procnum ¤Ø¤ÎÍ׵᤬ÆϤ¤¤¿¾ì¹ç¡¢ procname ¤¬¥Ñ¥é¥á¡¼¥¿¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤ò»ý¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ progname ¤ÏÀÅŪ¤Ê·ë²Ì¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹É¬Íפ¬¤¢¤ë¡£ inproc ¤Ï¥Ñ¥é¥á¡¼¥¿¡¼¤ò¥Ç¥³¡¼¥É¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¡£ outproc ¤Ï·ë²Ì¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÅÐÏ¿¤ËÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï -1¤òÊÖ¤¹¡£
- ·Ù¹ð: ¤³¤Î·Á¼°¤ÇÅÐÏ¿¤µ¤ì¤¿¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¤Ï UDP/IP ÄÌ¿®¤ò»ÈÍѤ¹¤ë¡£À©¸Â¤Ë´Ø¤·¤Æ¤Ï svcudp_create() ¤ò»²¾È¤¹¤ë¤³¤È¡£
struct rpc_createerr rpc_createerr;
- À®¸ù¤·¤Ê¤«¤Ã¤¿ RPC ¥¯¥é¥¤¥¢¥ó¥ÈÀ¸À®¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ëÂç°èÊÑ¿ô¡£ clnt_pcreateerror() ¥ë¡¼¥Æ¥£¥ó¤¬Íýͳ¤òɽ¼¨¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£
svc_destroy(xprt) SVCXPRT * xprt;
- ¤³¤Î¥Þ¥¯¥í¤ÏÄÌ¿®¥Ï¥ó¥É¥ë xprt ¤Î RPC ¥µ¡¼¥Ó¥¹¤òÇ˲õ¤¹¤ë¡£Ç˲õ¤Ë¤ÏÄ̾ xprt ¤ò´Þ¤á¤Æ¡¢»äŪ¤Ê¥Ç¡¼¥¿¹½Â¤ÂΤÎÇË´þ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ò¸Æ¤Ó½Ð¤·¤¿¸å¤Ë xprt ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£
fd_set svc_fdset;
- RPC ¥µ¡¼¥Ó¥¹Â¦¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤òÈ¿±Ç¤·¤¿Âç°èÊÑ¿ô¡£ select() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤Î¤¿¤á¤ËÍøÍѤǤ¤ë¡£¤³¤ì¤Ï ¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¼Ô¤¬ svc_run() ¤ò¸Æ¤Ó½Ð¤µ¤Ê¤º¤Ë¡¢Æȼ«¤ÎÈóƱ´ü¥¤¥Ù¥ó¥È½èÍý¤òÍѤ¤¤ë¾ì¹ç¤Ë¤Î¤ß°ÕÌ£¤¬¤¢¤ë¡£ ¤³¤ÎÊÑ¿ô¤ÏÆɤ߹þ¤ßÀìÍÑ¤Ç (¤½¤Î¤Þ¤Þ select() ¤ØÅϤ·¤Æ¤Ï¤Ê¤é¤Ê¤¤!)¡¢ svc_getreqset() ¸Æ¤Ó½Ð¤·¤äÀ¸À®¥ë¡¼¥Æ¥£¥ó¤Î¸å¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
int svc_fds;
- svc_fedset ¤Ë»÷¤Æ¤¤¤ë¤¬¡¢32 ¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï svc_fdset ¤Ë¤è¤Ã¤ÆÃÖ¤´¹¤¨¤é¤ì¤¿¡£
svc_freeargs(xprt, inproc, in) SVCXPRT *xprt; xdrproc_t inproc; char *in;
- ¤³¤Î¥Þ¥¯¥í¤Ï¥µ¡¼¥Ó¥¹¡¦¥×¥í¥·¥¸¥ã¤¬ svc_getargs() ¤ò»ÈÍѤ·¤Æ°ú¤¿ô¤ò¥Ç¥³¡¼¥É¤·¤¿»þ¤Ë RPC/XDR ¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ³ä¤êÅö¤Æ¤é¤ì¤¿¥Ç¡¼¥¿¤ò²òÊü¤¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï²òÊü¤ËÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï 1 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£
svc_getargs(xprt, inproc, in) SVCXPRT *xprt; xdrproc_t inproc; char *in;
- ¤³¤Î¥Þ¥¯¥í¤Ï RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¥Ï¥ó¥É¥ë xprt ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ RPC Í×µá¤Î°ú¤¿ô¤ò¥Ç¥³¡¼¥É¤¹¤ë¡£¥Ñ¥é¥á¡¼¥¿¡¼ in ¤Ï°ú¤¿ô¤Î³ÊǼ¤µ¤ì¤¿¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£ inproc ¤Ï°ú¤¿ô¤ò¥Ç¥³¡¼¥É¤¹¤ë¤¿¤á¤Î XDR ¥ë¡¼¥Æ¥£¥ó¤Ç¤¢¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥Ç¥³¡¼¥É¤ËÀ®¸ù¤·¤¿¾ì¹ç¤Ï 1 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¥¼¥í¤òÊÖ¤¹¡£
struct sockaddr_in * svc_getcaller(xprt) SVCXPRT *xprt;
- RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¥Ï¥ó¥É¥ë xprt ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥×¥í¥·¥¸¥ã¤Î¸Æ¤Ó½Ð¤·¸µ¤Î¥Í¥Ã¥È¥ï¡¼¥¯¡¦¥¢¥É¥ì¥¹¤ò ¼èÆÀ¤¹¤ë¤¿¤á¤Îɸ½àŪ¤Ê¼êÃÊ¡£
svc_getreqset(rdfds) fd_set *rdfds;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¼Ô¤¬ svc_run() ¤ò¸Æ¤Ó½Ð¤µ¤º¡¢Æȼ«¤ÎÈóƱ´ü¥¤¥Ù¥ó¥È½èÍý¤ò¼ÂÁõ¤¹¤ë¾ì¹ç¤Ë¤Î¤ß°ÕÌ£¤¬¤¢¤ë¡£ ¤³¤ì¤Ï select() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬ RPC ¥½¥±¥Ã¥È¤Ë RPC Í׵᤬ÅþÃ夷¤¿¤ÈÊÖ¤·¤¿¾ì¹ç¤Ë¤Î¤ß¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ rdfds ¤Ï·ë²Ì¤ÎÆɤ߹þ¤ß¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¤¢¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï rdfds ¤ÎÃͤ˴ØÏ¢ÉÕ¤±¤é¤ì¤¿Á´¤Æ¤Î¥½¥±¥Ã¥È¤Î¥µ¡¼¥Ó¥¹¤¬¹Ô¤Ê¤ï¤ì¤¿»þ¤Ë Ê֤äƤ¯¤ë¡£
svc_getreq(rdfds) int rdfds;
- svc_getreqset() ¤Ë»÷¤Æ¤¤¤ë¤¬¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î¿ô¤¬ 32 ¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï svc_getreqset() ¤Ë¤è¤Ã¤ÆÃÖ¤´¹¤¨¤é¤ì¤¿¡£
svc_register(xprt, prognum, versnum, dispatch, protocol) SVCXPRT *xprt; u_long prognum, versnum; void (*dispatch) (); u_long protocol;
- prognum ¤È versnum ¤ò¥µ¡¼¥Ó¥¹ÇÛʬ¥×¥í¥·¥¸¥ã dispatch ¤Ç´ØÏ¢ÉÕ¤±¤ë¡£ protocol ¤¬¥¼¥í¤Î¾ì¹ç¡¢¥µ¡¼¥Ó¥¹¤Ï portmap ¥µ¡¼¥Ó¥¹¤Ë¤ÏÅÐÏ¿¤µ¤ì¤Ê¤¤¡£ protocol ¤¬¥¼¥í°Ê³°¤Î¾ì¹ç¡¢ [prognum,versnum,protocol] ¤ÎÁȤ߹ç¤ï¤»¤È xprt->xp_port ¤È¤Î¥Þ¥Ã¥Ô¥ó¥°¤¬¥í¡¼¥«¥ë¤Î portmap ¥µ¡¼¥Ó¥¹¤ËÅÐÏ¿¤µ¤ì¤ë¡£(°ìÈÌŪ¤Ë protocol ¤Ï¥¼¥í¡¢ IPPROTO_UDP ¡¢ IPPROTO_TCP ¤Î¤É¤ì¤«¤Ç¤¢¤ë¡£) ¥×¥í¥·¥¸¥ã dispatch ¤Ï°Ê²¼¤Î·Á¼°¤Ç¤¢¤ë:
-
-
dispatch(request, xprt) struct svc_req *request; SVCXPRT *xprt;
-
- svc_register() ¥ë¡¼¥Æ¥£¥ó¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ï 1 ¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¥¼¥í¤òÊÖ¤¹¡£
svc_run()
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÌá¤Ã¤Æ¤³¤Ê¤¤¡£¤³¤ì¤Ï RPC Í×µá¤ÎÅþÃå¤òÂÔ¤Á¡¢¤É¤ì¤«¤¬ÆϤ¤¤¿¾ì¹ç¤Ë svc_getreq() ¤ò»ÈÍѤ·¤ÆŬÀڤʥµ¡¼¥Ó¥¹¡¦¥×¥í¥·¥¸¥ã¤ò¸Æ¤Ó½Ð¤¹¡£ ¤³¤Î¥×¥í¥·¥¸¥ã¤ÏÄ̾ï¤Ï select() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤«¤éÊÖ¤ë¤Î¤òÂԤäƤ¤¤ë¡£
svc_sendreply(xprt, outproc, out) SVCXPRT *xprt; xdrproc_t outproc; char *out;
- RPC ¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤Æ¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¡¦¥³¡¼¥ë¤Î·ë²Ì¤ò ÊÖ¤¹¤¿¤á¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ ¥Ñ¥é¥á¡¼¥¿¡¼ xprt ¤Ï¤½¤ÎÍ×µá¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÄÌ¿®¥Ï¥ó¥É¥ë¤Ç¤¢¤ë¡£ outproc ¤Ï·ë²Ì¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë XDR ¥ë¡¼¥Æ¥£¥ó¤Ç¤¢¤ë¡£ out ¤Ï·ë²Ì¤Î¥¢¥É¥ì¥¹¤Ç¤¢¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ï 1 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¥¼¥í¤òÊÖ¤¹¡£
void svc_unregister(prognum, versnum) u_long prognum, versnum;
- ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤«¤é [prognum,versnum] ¤ª¤è¤Ó [prognum,versnum,*] ¤ÎÁȤ߹ç¤ï¤»¤«¤é¥Ý¡¼¥ÈÈÖ¹æ¤Ø¤Î¥Þ¥Ã¥Ô¥ó¥°¤òÁ´¤Æºï½ü¤¹¤ë¡£
void svcerr_auth(xprt, why) SVCXPRT *xprt; enum auth_stat why;
- ǧ¾Ú¥¨¥é¡¼¤Ë¤è¤ê¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¡¦¥³¡¼¥ë¤Î¼Â¹Ô¤òµñÈݤµ¤ì¤¿ ¾ì¹ç¤Ë¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
void svcerr_decode(xprt) SVCXPRT *xprt;
- ¥Ñ¥é¥á¡¼¥¿¤Î¥Ç¥³¡¼¥É¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤Ë ¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ svc_getargs() ¤â»²¾È¤¹¤ë¤³¤È¡£
void svcerr_noproc(xprt) SVCXPRT *xprt;
- Í×µá¤Î¤¢¤Ã¤¿¥×¥í¥·¥¸¥ãÈֹ椬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë ¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤è¤ê¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
void svcerr_noprog(xprt) SVCXPRT *xprt;
- RPC ¥Ñ¥Ã¥±¡¼¥¸¤ËÍ׵ᤵ¤ì¤¿¥×¥í¥°¥é¥à¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ ¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¤Ë¤ÏÄ̾¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏɬÍפʤ¤¡£
void svcerr_progvers(xprt) SVCXPRT *xprt;
- RPC ¥Ñ¥Ã¥±¡¼¥¸¤ËÍ׵ᤵ¤ì¤¿¥Ð¡¼¥¸¥ç¥ó¤Î¥×¥í¥°¥é¥à¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¤Ë¤ÏÄ̾¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏɬÍפʤ¤¡£
void svcerr_systemerr(xprt) SVCXPRT *xprt;
- ÆÃÄê¤Î¥×¥í¥È¥³¥ë¤Ë¤è¤Ã¤Æ¥«¥Ð¡¼¤µ¤ì¤Æ¤¤¤Ê¥·¥¹¥Æ¥à¡¦¥¨¥é¡¼¤¬ ¸¡½Ð¤µ¤ì¤¿¾ì¹ç¤Ë¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ Î㤨¤Ð¡¢¥µ¡¼¥Ó¥¹¤¬¤½¤ì°Ê¾å¡¢µ²±ÁõÃÖ¤ò³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¾ì¹ç¤Ë¤Ï ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
void svcerr_weakauth(xprt) SVCXPRT *xprt;
- ǧ¾Ú¥Ñ¥é¥á¡¼¥¿¤¬Â¤ê¤Ê¤¤¤¿¤á¤Ë¥ê¥â¡¼¥È¡¦¥×¥í¥·¥¸¥ã¡¦¥³¡¼¥ë¤Î¼Â¹Ô¤ò µñÈݤµ¤ì¤¿¾ì¹ç¤Ë¥µ¡¼¥Ó¥¹ÇÛʬ¥ë¡¼¥Æ¥£¥ó¤Ë¤è¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï svcerr_auth(xprt, AUTH_TOOWEAK) ¤ò¸Æ¤Ó½Ð¤¹¡£
SVCXPRT * svcfd_create(fd, sendsize, recvsize) int fd; u_int sendsize; u_int recvsize;
- Ǥ°Õ¤Î¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¾å¤Ë¥µ¡¼¥Ó¥¹¤òºîÀ®¤¹¤ë¡£ ŵ·¿Åª¤Ë¡¢¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ï TCP ¤Î¤è¤¦¤Ê¥¹¥È¥ê¡¼¥à¡¦¥×¥í¥È¥³¥ë¤ÇÀܳ¤µ¤ì¤¿¥½¥±¥Ã¥È¤Ç¤¢¤ë¡£ sendsize ¤È recvsize ¤Ë¤ÏÁ÷¿®¥Ð¥Ã¥Õ¥¡¤È¼õ¿®¥Ð¥Ã¥Õ¥¡¤ÎÂ礤µ¤ò»ØÄꤹ¤ë¡£¤â¤·¥¼¥í¤¬»ØÄꤵ¤ì¤¿ ¾ì¹ç¤ÏŬÀڤʥǥե©¥ë¥È¤¬ÁªÂò¤µ¤ì¤ë¡£
SVCXPRT * svcraw_create()
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ïµ¼»÷ RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¤òÀ¸À®¤·¤Æ¡¢¤½¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£ ÄÌ¿®¤Ï¼ÂºÝ¤Ë¤Ï¤½¤Î¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë¤¢¤ë¥Ð¥Ã¥Õ¥¡¤Ê¤Î¤Ç Âбþ¤¹¤ë RPC ¥¯¥é¥¤¥¢¥ó¥È¤ÏƱ¤¸¥¢¥É¥ì¥¹¶õ´Ö¤Ë¤¤¤ëɬÍפ¬¤¢¤ë¡£ clntraw_create() ¤ò»²¾È¤¹¤ë¤³¤È¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ç RPC ¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¤ä¡¢¥«¡¼¥Í¥ë¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë±Æ¶Á¤µ¤ì¤º¤Ë±þÅú»þ´Ö¤Ê¤É¤Î RPC ¥ª¡¼¥Ð¥Ø¥Ã¥É¤ò¼èÆÀ¤¬¤Ç¤¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤òÊÖ¤¹¡£
SVCXPRT * svctcp_create(sock, send_buf_size, recv_buf_size) int sock; u_int send_buf_size, recv_buf_size;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï TCP/IP ¤Ë´ð¤Å¤¯ RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¤òºîÀ®¤·¡¢¤½¤ì¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£ ÄÌ¿®¤Ï¥½¥±¥Ã¥È sock ¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤ë¡£ sock ¤Ï RPC_ANYSOCK ¤Ç¤âÎɤ¤¡£¤³¤Î¾ì¹ç¤Ï¿·¤·¤¤¥½¥±¥Ã¥È¤¬ºîÀ®¤µ¤ì¤ë¡£ ¤â¤·¥½¥±¥Ã¥È¤¬¥í¡¼¥«¥ë¤Ê TCP ¥Ý¡¼¥È¤Ë bind ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¤³¤Î¥ë¡¼¥Æ¥£¥ó¤¬Å¬Åö¤Ê¥Ý¡¼¥È¤Ë bind ¤¹¤ë¡£Êä´°¤µ¤ì¤¿¾ì¹ç¡¢xprt->xp_sock ¤Ë¤ÏÄÌ¿®¤Î¥½¥±¥Ã¥È¡¦ ¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤¬¡¢xprt->xp_port ¤Ë¤ÏÄÌ¿®¤Î¥Ý¡¼¥ÈÈֹ椬 ÀßÄꤵ¤ì¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤òÊÖ¤¹¡£ TCP ¤Ë´ð¤Å¤¤¤¿ RPC ¤Ï¥Ð¥Ã¥Õ¥¡¤µ¤ì¤¿ I/O ¤ò»ÈÍѤ¹¤ë¤¿¤á¡¢¥æ¡¼¥¶¤Ï¥Ð¥Ã¥Õ¥¡¤ÎÂ礤µ¤ò»ØÄê¤Ç¤¤ë¡£ ¥¼¥í¤ò»ØÄꤷ¤¿¾ì¹ç¤ÏŬÀڤʥǥե©¥ë¥È¤¬ÁªÂò¤µ¤ì¤ë¡£
SVCXPRT * svcudp_bufcreate(sock, sendsize, recosize) int sock;
- ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï UDP/IP ¤Ë´ð¤Å¤¤¤¿ RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¤òºîÀ®¤·¡¢¤½¤Î¥Ý¥¤¥ó¥¿¡¼¤òÊÖ¤¹¡£ ÄÌ¿®¤Ï¥½¥±¥Ã¥È sock ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£ sock ¤Ï RPC_ANYSOCK ¤Ç¤âÎɤ¤¡£¤³¤Î¾ì¹ç¤Ï¿·¤·¤¤¥½¥±¥Ã¥È¤¬ºîÀ®¤µ¤ì¤ë¡£ ¥½¥±¥Ã¥È¤¬¥í¡¼¥«¥ë¤Î UDP ¥Ý¡¼¥È¤Ë bind ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏŬÅö¤Ê¥Ý¡¼¥È¤Ë bind ¤¹¤ë¡£Êä´°¤µ¤ì¤¿¾ì¹ç¡¢xprt->xp_sock ¤ËÄÌ¿®¤Î¥½¥±¥Ã¥È¤Î ¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤¬¡¢xprt->xp_port ¤ËÄÌ¿®¤Î¥Ý¡¼¥ÈÈֹ椬 ÀßÄꤵ¤ì¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¤Ï NULL ¤òÊÖ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¥æ¡¼¥¶¤Ï UDP ¤Ë´ð¤Å¤¤¤¿ RPC ¥á¥Ã¥»¡¼¥¸¤Ç»ÈÍѤǤ¤ëÁ÷¿®¥Ñ¥±¥Ã¥È¤ª¤è¤Ó¼õ¿®¥Ñ¥±¥Ã¥È¤ÎºÇÂ祵¥¤¥º¤ò»ØÄê¤Ç¤¤ë¡£
SVCXPRT * svcudp_create(sock) int sock;
- Á÷¿®¥Ñ¥±¥Ã¥È¤È¼õ¿®¥Ñ¥±¥Ã¥È¤Î¥µ¥¤¥º¤òƱ¤¸¥Ç¥Õ¥©¥ë¥È¤ÎÃÍ SZ ¤Ë»ØÄꤷ¤¿ svcudp_bufcreate(sock,SZ,SZ) ¤ÈÅù²Á¤Ç¤¢¤ë¡£
xdr_accepted_reply(xdrs, ar) XDR *xdrs; struct accepted_reply *ar;
- RPC ±þÅú¥á¥Ã¥»¡¼¥¸¤ò¥¨¥ó¥³¡¼¥É¤¹¤ë¤Î¤Ë»ÈÍѤ¹¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤òÍѤ¤¤º¤Ë RPC-·Á¼° ¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤è¤¦¤È¤¹¤ë¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_authunix_parms(xdrs, aupp) XDR *xdrs; struct authunix_parms *aupp;
- UNIX ·Á¼°¤Î¾ÚÌÀ½ñ¤òµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ǧ¾Ú¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë¤³¤ì¤é¤Î¾ÚÌÀ½ñ¤òºîÀ®¤·¤è¤¦¤È¤¹¤ë¾ì¹ç¤Ë ÊØÍø¤Ç¤¢¤ë¡£
void xdr_callhdr(xdrs, chdr) XDR *xdrs; struct rpc_msg *chdr;
- RPC ¸Æ¤Ó½Ð¤·¤Î¥Ø¥Ã¥À¡¼¡¦¥á¥Ã¥»¡¼¥¸¤òµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë RPC-·Á¼° ¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤è¤¦¤È¤¹¤ë¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_callmsg(xdrs, cmsg) XDR *xdrs; struct rpc_msg *cmsg;
- RPC ¸Æ¤Ó½Ð¤·¥á¥Ã¥»¡¼¥¸¤òµ½Ò¤¹¤ë¤Î¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë RPC-·Á¼° ¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤è¤¦¤È¤¹¤ë¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_opaque_auth(xdrs, ap) XDR *xdrs; struct opaque_auth *ap;
- PRC ǧ¾Ú¾ðÊó¥á¥Ã¥»¡¼¥¸¤òµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë RPC-·Á¼° ¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤è¤¦¤È¤¹¤ë¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_pmap(xdrs, regs) XDR *xdrs; struct pmap *regs;
- ³Æ¼ï¤Î portmap ¥×¥í¥·¥¸¥ã¤Ø¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ò³°ÉôŪ¤Ëµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï pmap ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò»ÈÍѤ»¤º¤Ë¡¢¤³¤ì¤é¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ò ºîÀ®¤·¤¿¤¤¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_pmaplist(xdrs, rp) XDR *xdrs; struct pmaplist **rp;
- ¥Ý¡¼¥È¤Î¥Þ¥Ã¥Ô¥ó¥°¤Î¥ê¥¹¥È¤ò³°ÉôŪ¤Ëµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï pmap ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò»ÈÍѤ»¤º¤Ë¡¢¤³¤ì¤é¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤ò ºîÀ®¤·¤¿¤¤¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_rejected_reply(xdrs, rr) XDR *xdrs; struct rejected_reply *rr;
- RPC ±þÅú¥á¥Ã¥»¡¼¥¸¤òµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë¡¢ RPC-·Á¼° ¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤¿¤¤¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
xdr_replymsg(xdrs, rmsg) XDR *xdrs; struct rpc_msg *rmsg;
- RPC ±þÅú¥á¥Ã¥»¡¼¥¸¤òµ½Ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤Ï RPC ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍѤ»¤º¤Ë¡¢ RPC ·Á¼°¤Î¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤·¤¿¤¤¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
void xprt_register(xprt) SVCXPRT *xprt;
- RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¥Ï¥ó¥É¥ë¤òÀ¸À®¤·¤¿¸å¤Ë¡¢¤½¤ì¤é¼«¿È¤ò RPC ¥µ¡¼¥Ó¥¹¡¦¥Ñ¥Ã¥±¡¼¥¸¤ËÅÐÏ¿¤¹¤ëɬÍפ¬¤¢¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÂç°èÊÑ¿ô svc_fds() ¤ò½¤Àµ¤¹¤ë¡£¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¼Ô¤ÏÄ̾¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏɬÍפʤ¤¡£
void xprt_unregister(xprt) SVCXPRT *xprt;
- RPC ¥µ¡¼¥Ó¥¹ÄÌ¿®¥Ï¥ó¥É¥ë¤òÇ˲õ¤¹¤ëÁ°¤Ë¡¢¤½¤ì¤ò RPC ÄÌ¿®¥Ñ¥Ã¥±¡¼¥¸¤«¤éÅÐÏ¿²ò½ü¤¹¤ëɬÍפ¬¤¢¤ë¡£ ¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏÂç°èÊÑ¿ô svc_fds() ¤ò½¤Àµ¤¹¤ë¡£¥µ¡¼¥Ó¥¹¤Î¼ÂÁõ¼Ô¤ÏÄ̾¤³¤Î¥ë¡¼¥Æ¥£¥ó¤ÏɬÍפʤ¤¡£
´ØÏ¢¹àÌÜ
xdr(3)°Ê²¼¤Î¥Þ¥Ë¥å¥¢¥ë:
- Remote Procedure Calls: Protocol Specification
Remote Procedure Call Programming Guide
rpcgen Programming Guide
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre