gsqltrn_svc.c.preserve
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:6k
源码类别:
SQL Server
开发平台:
Unix_Linux
- /*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
- #include "gsqltrn.h"
- #include <stdio.h>
- #include <stdlib.h> /* getenv, exit */
- #include <signal.h>
- #include <sys/types.h>
- #include <memory.h>
- #include <stropts.h>
- #include <netconfig.h>
- #include <sys/resource.h> /* rlimit */
- #include <syslog.h>
- #ifdef DEBUG
- #define RPC_SVC_FG
- #endif
- #define _RPCSVC_CLOSEDOWN 120
- #define main run_server
- #define RPC_SVC_FG
- #undef GSQL_TRN
- #define GSQL_TRN rpc_program_id
- extern long rpc_program_id;
- static int _rpcpmstart; /* Started by a port monitor ? */
- /* States a server can be in wrt request */
- #define _IDLE 0
- #define _SERVED 1
- static int _rpcsvcstate = _IDLE; /* Set when a request is serviced */
- static int _rpcsvccount = 0; /* Number of requests being serviced */
- static
- void _msgout(msg)
- char *msg;
- {
- #ifdef RPC_SVC_FG
- if (_rpcpmstart)
- syslog(LOG_ERR, msg);
- else
- (void) fprintf(stderr, "%sn", msg);
- #else
- syslog(LOG_ERR, msg);
- #endif
- }
- static void
- closedown(sig)
- int sig;
- {
- if (_rpcsvcstate == _IDLE && _rpcsvccount == 0) {
- extern fd_set svc_fdset;
- static int size;
- int i, openfd;
- struct t_info tinfo;
- if (!t_getinfo(0, &tinfo) && (tinfo.servtype == T_CLTS))
- exit(0);
- if (size == 0) {
- struct rlimit rl;
- rl.rlim_max = 0;
- getrlimit(RLIMIT_NOFILE, &rl);
- if ((size = rl.rlim_max) == 0) {
- return;
- }
- }
- for (i = 0, openfd = 0; i < size && openfd < 2; i++)
- if (FD_ISSET(i, &svc_fdset))
- openfd++;
- if (openfd <= 1)
- exit(0);
- } else
- _rpcsvcstate = _IDLE;
- (void) signal(SIGALRM, (void(*)()) closedown);
- (void) alarm(_RPCSVC_CLOSEDOWN/2);
- }
- static void
- gsql_trn_1(rqstp, transp)
- struct svc_req *rqstp;
- register SVCXPRT *transp;
- {
- union {
- init_params_t init_comp_1_arg;
- stmt_info_t compile_1_arg;
- seg_del_t del_segment_1_arg;
- link_cursor_t link_cursor_1_arg;
- string_t load_module_1_arg;
- insn_t execute_stmt_1_arg;
- } argument;
- char *result;
- bool_t (*xdr_argument)(), (*xdr_result)();
- char *(*local)();
- _rpcsvccount++;
- switch (rqstp->rq_proc) {
- case NULLPROC:
- (void) svc_sendreply(transp, xdr_void,
- (char *)NULL);
- _rpcsvccount--;
- _rpcsvcstate = _SERVED;
- return;
- case INIT_COMP:
- xdr_argument = xdr_init_params_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) init_comp_1;
- break;
- case COMPILE:
- xdr_argument = xdr_stmt_info_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) compile_1;
- break;
- case DEL_SEGMENT:
- xdr_argument = xdr_seg_del_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) del_segment_1;
- break;
- case LINK_CURSOR:
- xdr_argument = xdr_link_cursor_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) link_cursor_1;
- break;
- case LOAD_MODULE:
- xdr_argument = xdr_string_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) load_module_1;
- break;
- case EXECUTE_STMT:
- xdr_argument = xdr_insn_t;
- xdr_result = xdr_result_t;
- local = (char *(*)()) execute_stmt_1;
- break;
- case DB_CREATE:
- xdr_argument = xdr_void;
- xdr_result = xdr_result_t;
- local = (char *(*)()) db_create_1;
- break;
- case RETRY:
- xdr_argument = xdr_void;
- xdr_result = xdr_result_t;
- local = (char *(*)()) retry_1;
- break;
- case IS_RPC_READY:
- xdr_argument = xdr_void;
- xdr_result = xdr_int;
- local = (char *(*)()) is_rpc_ready_1;
- break;
- default:
- svcerr_noproc(transp);
- _rpcsvccount--;
- _rpcsvcstate = _SERVED;
- return;
- }
- (void) memset((char *)&argument, 0, sizeof (argument));
- if (!svc_getargs(transp, xdr_argument, &argument)) {
- svcerr_decode(transp);
- _rpcsvccount--;
- _rpcsvcstate = _SERVED;
- return;
- }
- result = (*local)(&argument, rqstp);
- if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
- svcerr_systemerr(transp);
- }
- if (!svc_freeargs(transp, xdr_argument, &argument)) {
- _msgout("unable to free arguments");
- exit(1);
- }
- _rpcsvccount--;
- _rpcsvcstate = _SERVED;
- return;
- }
- main()
- {
- pid_t pid;
- int i;
- char mname[FMNAMESZ + 1];
- (void) sigset(SIGPIPE, SIG_IGN);
- if (!ioctl(0, I_LOOK, mname) &&
- (!strcmp(mname, "sockmod") || !strcmp(mname, "timod"))) {
- char *netid;
- struct netconfig *nconf = NULL;
- SVCXPRT *transp;
- int pmclose;
- _rpcpmstart = 1;
- openlog("gsqltrn", LOG_PID, LOG_DAEMON);
- if ((netid = getenv("NLSPROVIDER")) == NULL) {
- /* started from inetd */
- pmclose = 1;
- } else {
- if ((nconf = getnetconfigent(netid)) == NULL)
- _msgout("cannot get transport info");
- pmclose = (t_getstate(0) != T_DATAXFER);
- }
- if (strcmp(mname, "sockmod") == 0) {
- if (ioctl(0, I_POP, 0) || ioctl(0, I_PUSH, "timod")) {
- _msgout("could not get the right module");
- exit(1);
- }
- }
- if ((transp = svc_tli_create(0, nconf, NULL, 0, 0)) == NULL) {
- _msgout("cannot create server handle");
- exit(1);
- }
- if (nconf)
- freenetconfigent(nconf);
- if (!svc_reg(transp, GSQL_TRN, BETA0, gsql_trn_1, 0)) {
- _msgout("unable to register (GSQL_TRN, BETA0).");
- exit(1);
- }
- if (pmclose) {
- (void) signal(SIGALRM, (void(*)()) closedown);
- (void) alarm(_RPCSVC_CLOSEDOWN/2);
- }
- svc_run();
- exit(1);
- /* NOTREACHED */
- } else {
- #ifndef RPC_SVC_FG
- int size;
- struct rlimit rl;
- pid = fork();
- if (pid < 0) {
- perror("cannot fork");
- exit(1);
- }
- if (pid)
- exit(0);
- rl.rlim_max = 0;
- getrlimit(RLIMIT_NOFILE, &rl);
- if ((size = rl.rlim_max) == 0)
- exit(1);
- for (i = 0; i < size; i++)
- (void) close(i);
- i = open("/dev/console", 2);
- (void) dup2(i, 1);
- (void) dup2(i, 2);
- setsid();
- openlog("gsqltrn", LOG_PID, LOG_DAEMON);
- #endif
- }
- if (!svc_create(gsql_trn_1, GSQL_TRN, BETA0, "netpath")) {
- _msgout("unable to create (GSQL_TRN, BETA0) for netpath.");
- exit(1);
- }
- svc_run();
- _msgout("svc_run returned");
- exit(1);
- /* NOTREACHED */
- }