diff options
author | mbr <mbr@FreeBSD.org> | 2003-01-16 07:27:30 +0000 |
---|---|---|
committer | mbr <mbr@FreeBSD.org> | 2003-01-16 07:27:30 +0000 |
commit | f4b7d5938511f9f869d55eaf04dbfc04edcf0989 (patch) | |
tree | 9666afecfbd20dd475ac216552d1c46a292cf343 /usr.sbin | |
parent | 247cd2063c55a737d5fd75bc16a9a26a7631f458 (diff) | |
download | FreeBSD-src-f4b7d5938511f9f869d55eaf04dbfc04edcf0989.zip FreeBSD-src-f4b7d5938511f9f869d55eaf04dbfc04edcf0989.tar.gz |
Implement nonblocking tpc-connections. rpcgen -m does still
produce backcompatible code.
Reviewed by: rwatson
Obtained from: NetBSD
MFC after: 1 day
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/mountd/mountd.c | 9 | ||||
-rw-r--r-- | usr.sbin/rpc.lockd/lockd.c | 7 | ||||
-rw-r--r-- | usr.sbin/rpc.statd/statd.c | 4 | ||||
-rw-r--r-- | usr.sbin/rpc.yppasswdd/yppasswdd_main.c | 4 | ||||
-rw-r--r-- | usr.sbin/rpcbind/rpcb_svc_com.c | 8 | ||||
-rw-r--r-- | usr.sbin/rpcbind/rpcbind.c | 11 |
6 files changed, 35 insertions, 8 deletions
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c index d24c2a8..2fff366 100644 --- a/usr.sbin/mountd/mountd.c +++ b/usr.sbin/mountd/mountd.c @@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$"); #include <sys/module.h> #include <rpc/rpc.h> +#include <rpc/rpc_com.h> #include <rpc/pmap_clnt.h> #include <rpc/pmap_prot.h> #include <rpcsvc/mount.h> @@ -273,6 +274,7 @@ main(argc, argv) struct netconfig *udpconf, *tcpconf, *udp6conf, *tcp6conf; int udpsock, tcpsock, udp6sock, tcp6sock; int xcreated = 0, s; + int maxrec = RPC_MAXDATASIZE; int one = 1; int c; @@ -354,6 +356,9 @@ main(argc, argv) tcpsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); udpconf = getnetconfigent("udp"); tcpconf = getnetconfigent("tcp"); + + rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); + if (!have_v6) goto skip_v6; udp6sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); @@ -408,7 +413,7 @@ skip_v6: if (tcpsock != -1 && tcpconf != NULL) { bindresvport(tcpsock, NULL); listen(tcpsock, SOMAXCONN); - tcptransp = svc_vc_create(tcpsock, 0, 0); + tcptransp = svc_vc_create(tcpsock, RPC_MAXDATASIZE, RPC_MAXDATASIZE); if (tcptransp != NULL) { if (!svc_reg(tcptransp, RPCPROG_MNT, RPCMNT_VER1, mntsrv, tcpconf)) @@ -449,7 +454,7 @@ skip_v6: if (have_v6 && tcp6sock != -1 && tcp6conf != NULL) { bindresvport(tcp6sock, NULL); listen(tcp6sock, SOMAXCONN); - tcp6transp = svc_vc_create(tcp6sock, 0, 0); + tcp6transp = svc_vc_create(tcp6sock, RPC_MAXDATASIZE, RPC_MAXDATASIZE); if (tcp6transp != NULL) { if (!svc_reg(tcp6transp, RPCPROG_MNT, RPCMNT_VER1, mntsrv, tcp6conf)) diff --git a/usr.sbin/rpc.lockd/lockd.c b/usr.sbin/rpc.lockd/lockd.c index 2f56aba..db8b669 100644 --- a/usr.sbin/rpc.lockd/lockd.c +++ b/usr.sbin/rpc.lockd/lockd.c @@ -61,6 +61,7 @@ __RCSID("$NetBSD: lockd.c,v 1.7 2000/08/12 18:08:44 thorpej Exp $"); #include <netconfig.h> #include <rpc/rpc.h> +#include <rpc/rpc_com.h> #include <rpcsvc/sm_inter.h> #include "lockd.h" @@ -95,6 +96,7 @@ main(argc, argv) struct sigaction sigalarm; int grace_period = 30; struct netconfig *nconf; + int maxrec = RPC_MAXDATASIZE; while ((ch = getopt(argc, argv, "d:g:")) != (-1)) { switch (ch) { @@ -139,13 +141,16 @@ main(argc, argv) maxindex = 4; } + rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); + for (i = 0; i < maxindex; i++) { nconf = getnetconfigent(transports[i]); if (nconf == NULL) errx(1, "cannot get %s netconf: %s.", transports[i], nc_sperror()); - transp = svc_tli_create(RPC_ANYFD, nconf, NULL, 0, 0); + transp = svc_tli_create(RPC_ANYFD, nconf, NULL, + RPC_MAXDATASIZE, RPC_MAXDATASIZE); if (transp == NULL) { errx(1, "cannot create %s service.", transports[i]); /* NOTREACHED */ diff --git a/usr.sbin/rpc.statd/statd.c b/usr.sbin/rpc.statd/statd.c index b77e9bb..6e51781 100644 --- a/usr.sbin/rpc.statd/statd.c +++ b/usr.sbin/rpc.statd/statd.c @@ -44,6 +44,7 @@ static const char rcsid[] = #include <stdio.h> #include <stdlib.h> #include <rpc/rpc.h> +#include <rpc/rpc_com.h> #include <string.h> #include <syslog.h> #include <sys/types.h> @@ -61,6 +62,7 @@ int main(int argc, char **argv) { struct sigaction sa; + int maxrec = RPC_MAXDATASIZE; if (argc > 1) { @@ -71,6 +73,8 @@ main(int argc, char **argv) (void)rpcb_unset(SM_PROG, SM_VERS, NULL); + rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); + if (!svc_create(sm_prog_1, SM_PROG, SM_VERS, "udp")) errx(1, "cannot create udp service"); if (!svc_create(sm_prog_1, SM_PROG, SM_VERS, "tcp")) diff --git a/usr.sbin/rpc.yppasswdd/yppasswdd_main.c b/usr.sbin/rpc.yppasswdd/yppasswdd_main.c index 2f7e1e2..7c9b011 100644 --- a/usr.sbin/rpc.yppasswdd/yppasswdd_main.c +++ b/usr.sbin/rpc.yppasswdd/yppasswdd_main.c @@ -56,6 +56,7 @@ static const char rcsid[] = #include <unistd.h> #include <rpc/rpc.h> +#include <rpc/rpc_com.h> #include <rpc/pmap_clnt.h> /* for pmap_unset */ #include <rpcsvc/yp.h> struct dom_binding {}; @@ -171,6 +172,7 @@ main(int argc, char *argv[]) int ch; char *mastername; char myname[MAXHOSTNAMELEN + 2]; + int maxrec = RPC_MAXDATASIZE; extern int debug; @@ -273,6 +275,8 @@ the %s domain -- aborting", yppasswd_domain); rpcb_unset(YPPASSWDPROG, YPPASSWDVERS, NULL); rpcb_unset(MASTER_YPPASSWDPROG, MASTER_YPPASSWDVERS, NULL); + rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); + if (svc_create(yppasswdprog_1, YPPASSWDPROG, YPPASSWDVERS, "netpath") == 0) { yp_error("cannot create yppasswd service."); exit(1); diff --git a/usr.sbin/rpcbind/rpcb_svc_com.c b/usr.sbin/rpcbind/rpcb_svc_com.c index 541d168..dbe312e 100644 --- a/usr.sbin/rpcbind/rpcb_svc_com.c +++ b/usr.sbin/rpcbind/rpcb_svc_com.c @@ -1,4 +1,4 @@ -/* $NetBSD: rpcb_svc_com.c,v 1.6 2000/08/03 00:07:22 fvdl Exp $ */ +/* $NetBSD: rpcb_svc_com.c,v 1.9 2002/11/08 00:16:39 fvdl Exp $ */ /* $FreeBSD$ */ /* @@ -1073,6 +1073,7 @@ netbuffree(struct netbuf *ap) #define MASKVAL (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND) +extern bool_t __svc_clean_idle(fd_set *, int, bool_t); void my_svc_run() @@ -1085,6 +1086,7 @@ my_svc_run() int i; #endif register struct pollfd *p; + fd_set cleanfds; for (;;) { p = pollfds; @@ -1106,7 +1108,7 @@ my_svc_run() fprintf(stderr, ">\n"); } #endif - switch (poll_ret = poll(pollfds, nfds, INFTIM)) { + switch (poll_ret = poll(pollfds, nfds, 30 * 1000)) { case -1: /* * We ignore all errors, continuing with the assumption @@ -1114,6 +1116,8 @@ my_svc_run() * other outside event) and not caused by poll(). */ case 0: + cleanfds = svc_fdset; + __svc_clean_idle(&cleanfds, 30, FALSE); continue; default: #ifdef SVC_RUN_DEBUG diff --git a/usr.sbin/rpcbind/rpcbind.c b/usr.sbin/rpcbind/rpcbind.c index 21c19b0..ccfd153 100644 --- a/usr.sbin/rpcbind/rpcbind.c +++ b/usr.sbin/rpcbind/rpcbind.c @@ -1,4 +1,4 @@ -/* $NetBSD: rpcbind.c,v 1.1 2000/06/02 23:15:42 fvdl Exp $ */ +/* $NetBSD: rpcbind.c,v 1.3 2002/11/08 00:16:40 fvdl Exp $ */ /* $FreeBSD$ */ /* @@ -57,6 +57,7 @@ static char sccsid[] = "@(#)rpcbind.c 1.35 89/04/21 Copyr 1984 Sun Micro"; #include <sys/socket.h> #include <sys/un.h> #include <rpc/rpc.h> +#include <rpc/rpc_com.h> #ifdef PORTMAP #include <netinet/in.h> #endif @@ -124,6 +125,7 @@ main(int argc, char *argv[]) struct netconfig *nconf; void *nc_handle; /* Net config handle */ struct rlimit rl; + int maxrec = RPC_MAXDATASIZE; parseargs(argc, argv); @@ -165,6 +167,9 @@ main(int argc, char *argv[]) syslog(LOG_ERR, "%s: can't find local transport\n", argv[0]); exit(1); } + + rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); + init_transport(nconf); while ((nconf = getnetconfig(nc_handle))) { @@ -431,7 +436,7 @@ init_transport(struct netconfig *nconf) listen(fd, SOMAXCONN); my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr, - 0, 0); + RPC_MAXDATASIZE, RPC_MAXDATASIZE); if (my_xprt == (SVCXPRT *)NULL) { syslog(LOG_ERR, "%s: could not create service", nconf->nc_netid); @@ -491,7 +496,7 @@ init_transport(struct netconfig *nconf) if (nconf->nc_semantics != NC_TPI_CLTS) listen(fd, SOMAXCONN); - my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr, 0, 0); + my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr, RPC_MAXDATASIZE, RPC_MAXDATASIZE); if (my_xprt == (SVCXPRT *)NULL) { syslog(LOG_ERR, "%s: could not create service", nconf->nc_netid); |