summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authormbr <mbr@FreeBSD.org>2003-01-16 07:27:30 +0000
committermbr <mbr@FreeBSD.org>2003-01-16 07:27:30 +0000
commitf4b7d5938511f9f869d55eaf04dbfc04edcf0989 (patch)
tree9666afecfbd20dd475ac216552d1c46a292cf343 /usr.sbin
parent247cd2063c55a737d5fd75bc16a9a26a7631f458 (diff)
downloadFreeBSD-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.c9
-rw-r--r--usr.sbin/rpc.lockd/lockd.c7
-rw-r--r--usr.sbin/rpc.statd/statd.c4
-rw-r--r--usr.sbin/rpc.yppasswdd/yppasswdd_main.c4
-rw-r--r--usr.sbin/rpcbind/rpcb_svc_com.c8
-rw-r--r--usr.sbin/rpcbind/rpcbind.c11
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);
OpenPOWER on IntegriCloud