v07i087: xmeter - Display rstat statistics, Patch2, Part01/01

Robert Schwartzkopf bobs%moose at rand.org
Sat Jun 9 03:39:21 AEST 1990


Submitted-by: Robert Schwartzkopf <bobs%moose at rand.org>
Posting-number: Volume 7, Issue 87
Archive-name: xmeter/patch2
Patch-To: xmeter: Volume 6, Issue 98
Patch-To: xmeter: Volume 7, Issue 34 (patch 1)

This patch includes many bug fixes suggested by various people.
My thanks to everyone who took the time to find the bugs and report them.

Bob Schwartzkopf (bobs at rand.org)

#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:    Shell Archiver
#	Run the following text with /bin/sh to create:
#	patch2
# This archive created: Thu Jun  7 16:33:40 1990
echo shar: extracting patch2
sed 's/^XX//' << \SHAR_EOF > patch2
XX*** /tmp/,RCSt1a14009	Thu Jun  7 16:32:02 1990
XX--- patchlevel.h	Thu Jun  7 16:25:06 1990
XX***************
XX*** 1 ****
XX! #define PATCHLEVEL 1
XX--- 1 ----
XX! #define PATCHLEVEL 2
XX*** /tmp/,RCSt1a14045	Thu Jun  7 16:32:37 1990
XX--- xmeter.c	Thu Jun  7 16:23:26 1990
XX***************
XX*** 5,19 ****
XX   *
XX   * Suggestions for improvements and bug fixes can be sent to "bobs at rand.org".
XX   * As my schedule permits I'll try to incorporate them.  xmeter is known
XX!  * to run under X11 R4 on sun3s and sun4s running SunOS 4.0.3.
XX   */
XX  
XX  #ifndef lint
XX! static char	*RCSid="$Header:
/tmp_mnt/home/src/rand/xmeter/RCS/xmeter.c,v 1.2 90/05/04 12:31:52 bobs Exp $";
XX  #endif lint
XX  
XX  /*
XX   * $Log:	xmeter.c,v $
XX   * Revision 1.2  90/05/04  12:31:52  bobs
XX   * Fix memory leak in getport().  Wasn't freeing resources allocated by
XX   * clntudp_create when clnt_call failed.  Also removed explicit calls
XX--- 5,30 ----
XX   *
XX   * Suggestions for improvements and bug fixes can be sent to "bobs at rand.org".
XX   * As my schedule permits I'll try to incorporate them.  xmeter is known
XX!  * to run under X11 R4 on sun3s and sun4s running SunOS 4.0.3, 4.1.
XX   */
XX  
XX  #ifndef lint
XX! static char	*RCSid="$Header:
/tmp_mnt/home/src/rand/xmeter/RCS/xmeter.c,v 1.3 90/06/07 16:17:06 bobs Exp $";
XX  #endif lint
XX  
XX  /*
XX   * $Log:	xmeter.c,v $
XX+  * Revision 1.3  90/06/07  16:17:06  bobs
XX+  * Removed "retries".
XX+  * Changed name of paned widgets to host name displayed in that widget.
XX+  * Used actual time between rstat calls instead of "update" interval in
XX+  * computing rates in functions that return values to stripchart widgets.
XX+  * Removed "ost" variable, rewrote functions that return values to
XX+  * stripcharts.
XX+  * Fixed bug in fsys, fcpu and fuser that could cause divide by 0 errors.
XX+  * Fixed rpc timeout handling in getmeter and getport.
XX+  * Use RSTATVERS_TIME instead of RSTATVERS, which isn't defined in SunOS 4.1.
XX+  * 
XX   * Revision 1.2  90/05/04  12:31:52  bobs
XX   * Fix memory leak in getport().  Wasn't freeing resources allocated by
XX   * clntudp_create when clnt_call failed.  Also removed explicit calls
XX***************
XX*** 63,68 ****
XX--- 74,80 ----
XX      int			idx;	/* Index into st array			*/
XX      int			refcnt;	/* Meters sharing this structure	*/
XX      int			curcnt;	/* Meters who've displayed current data	*/
XX+     int			first;	/* TRUE when only 1 rstat has been done	*/
XX      struct shmeter	*nxt;	/* Link these together			*/
XX  } SHMETER;
XX  
XX***************
XX*** 136,142 ****
XX  int			errorLevel;
XX  XtOrientation		orientation;
XX  int			timeout;
XX- int			retries;
XX  int			update;
XX  short			width;
XX  int			loadscaledef = FSCALE;
XX--- 148,153 ----
XX***************
XX*** 147,154 ****
XX  	(Cardinal) &width, XtRString, "80"},
XX      {"timeout", "Timeout", XtRInt, sizeof (int),
XX  	(Cardinal) &timeout, XtRString, "5"},
XX-     {"retries", "Retries", XtRInt, sizeof (int),
XX- 	(Cardinal) &retries, XtRString, "2"},
XX      {"okBack", "OkBack", XtRPixel, sizeof (Pixel),
XX  	(Cardinal) &back[OK], XtRString, "white"},
XX      {"warnBack", "WarnBack", XtRPixel, sizeof (Pixel),
XX--- 158,163 ----
XX***************
XX*** 195,201 ****
XX  static char		*progname;
XX  static XrmOptionDescRec	options[] = {
XX      {"-timeout",	"timeout",		XrmoptionSepArg,	NULL},
XX-     {"-retries",	"retries",		XrmoptionSepArg,	NULL},
XX      {"-orientation",	"orientation",	
XrmoptionSepArg,	NULL},
XX      {"-okBack",		"okBack",	
XrmoptionSepArg,	NULL},
XX      {"-warnBack",	"warnBack",		XrmoptionSepArg,	NULL},
XX--- 204,209 ----
XX***************
XX*** 228,234 ****
XX      {XtNresizable,		TRUE },		/* Resizable		*/
XX  };
XX  static struct timeval	ptto = {0, 0};
XX- static struct timeval	tto = {0, 0};
XX  static Arg		args[20];
XX  static SHMETER		*shmeters = NULL;
XX  
XX--- 236,241 ----
XX***************
XX*** 241,247 ****
XX    Widget	toplevel;
XX    Widget	form;
XX    Widget	meter;
XX-   Widget	label;
XX    Widget	pane = NULL;
XX    int		i;
XX    int		n;
XX--- 248,253 ----
XX***************
XX*** 257,263 ****
XX    XtGetApplicationResources (toplevel, NULL, application_resources,
XX  			     XtNumber (application_resources), NULL, 0);
XX    ptto.tv_sec = timeout;
XX-   tto.tv_sec = retries * timeout;
XX    form = XtCreateManagedWidget ("form", formWidgetClass, toplevel,
XX  			        formargs, XtNumber (formargs));
XX    if (argc < 2)
XX--- 263,268 ----
XX***************
XX*** 271,284 ****
XX        n = 0;
XX        XtSetArg (args[n], orient, pane); n++;
XX        XtSetArg (args[n], XtNwidth, width); n++;
XX!       pane = XtCreateManagedWidget ("paned", panedWidgetClass, form, args, n);
XX        n = 0;
XX        XtSetArg (args[n], XtNshowGrip, XtEno); n++;
XX        XtSetArg (args[n], XtNlabel, h->label); n++;
XX        XtSetArg (args[n], XtNbackground, back[OK]); n++;
XX!       label = XtCreateManagedWidget ("label", labelWidgetClass,
XX! 				     pane, args, n);
XX!       h->labelwidget = label;
XX        n = 0;
XX        XtSetArg (args[n], orient, meter); n++;
XX        XtSetArg (args[n], XtNresizable, TRUE); n++;
XX--- 276,289 ----
XX        n = 0;
XX        XtSetArg (args[n], orient, pane); n++;
XX        XtSetArg (args[n], XtNwidth, width); n++;
XX!       pane = XtCreateManagedWidget (h->sh->name, panedWidgetClass,
XX! 				    form, args, n);
XX        n = 0;
XX        XtSetArg (args[n], XtNshowGrip, XtEno); n++;
XX        XtSetArg (args[n], XtNlabel, h->label); n++;
XX        XtSetArg (args[n], XtNbackground, back[OK]); n++;
XX!       h->labelwidget = XtCreateManagedWidget ("label", labelWidgetClass,
XX! 					      pane, args, n);
XX        n = 0;
XX        XtSetArg (args[n], orient, meter); n++;
XX        XtSetArg (args[n], XtNresizable, TRUE); n++;
XX***************
XX*** 342,353 ****
XX    *(double *) data = s == FATAL ? 0.0 : (double) l / sd[h->stat].scale;
XX    sh = h->sh;
XX    if (s != h->oldstate) {
XX!       n = 0;		/* Change background in pane widget		*/
XX        XtSetArg (args[n], XtNbackground, back[s]); n++;
XX        XtSetValues (w, args, n);
XX!       n = 0;		/* Change background in label widget		*/
XX        XtSetArg (args[n], XtNbackground, back[s]); n++;
XX!       if (s == FATAL || h->oldstate == FATAL) {	/* Change label too	*/
XX  	  sprintf (h->label, "%s %s", sh->name,
XX  		   s == FATAL ? DMSG : sd[h->stat].name);
XX  	  XtSetArg (args[n], XtNlabel, h->label); n++;
XX--- 347,358 ----
XX    *(double *) data = s == FATAL ? 0.0 : (double) l / sd[h->stat].scale;
XX    sh = h->sh;
XX    if (s != h->oldstate) {
XX!       n = 0;		/* Change background in stripchart widget	*/
XX        XtSetArg (args[n], XtNbackground, back[s]); n++;
XX        XtSetValues (w, args, n);
XX!       n = 0;		/* Update label widget				*/
XX        XtSetArg (args[n], XtNbackground, back[s]); n++;
XX!       if (s == FATAL || h->oldstate == FATAL) {
XX  	  sprintf (h->label, "%s %s", sh->name,
XX  		   s == FATAL ? DMSG : sd[h->stat].name);
XX  	  XtSetArg (args[n], XtNlabel, h->label); n++;
XX***************
XX*** 382,392 ****
XX   * value and the previous value, and dividing by the update interval in
XX   * order to get the current rate.
XX   */
XX  
XX! int fuser (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX    int	i;
XX--- 387,398 ----
XX   * value and the previous value, and dividing by the update interval in
XX   * order to get the current rate.
XX   */
XX+ #define DIF(m,fld)	(m->sh->st[m->sh->idx].fld - \
XX+ 			 m->sh->st[m->sh->idx ^ 1].fld)
XX  
XX! int fuser (h)
XX  
XX! METER	*h;
XX  
XX  {
XX    int	i;
XX***************
XX*** 393,410 ****
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   if (ost) {
XX!       for (t = 0, i= 0; i < CPUSTATES; i++)
XX! 	  t += (d[i] = h->sh->st[h->sh->idx].cp_time[i] - ost->cp_time[i]);
XX!       return ((100 * (d[CP_USER] + d[CP_NICE])) / t);
XX!   } else
XX!       return (0);
XX  }
XX  
XX! int fsys (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX    int	i;
XX--- 399,412 ----
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   for (t = 0, i= 0; i < CPUSTATES; i++)
XX!       t += (d[i] = DIF (h, cp_time[i]));
XX!   return (t ? (100 * (d[CP_USER] + d[CP_NICE])) / t : 0);
XX  }
XX  
XX! int fsys (h)
XX  
XX! METER	*h;
XX  
XX  {
XX    int	i;
XX***************
XX*** 411,428 ****
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   if (ost) {
XX!       for (t = 0, i= 0; i < CPUSTATES; i++)
XX! 	  t += (d[i] = h->sh->st[h->sh->idx].cp_time[i] - ost->cp_time[i]);
XX!       return ((100 * d[CP_SYS]) / t);
XX!   } else
XX!       return (0);
XX  }
XX  
XX! int fcpu (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX    int	i;
XX--- 413,426 ----
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   for (t = 0, i= 0; i < CPUSTATES; i++)
XX!       t += (d[i] = DIF (h, cp_time[i]));
XX!   return (t ? (100 * d[CP_SYS]) / t : 0);
XX  }
XX  
XX! int fcpu (h)
XX  
XX! METER	*h;
XX  
XX  {
XX    int	i;
XX***************
XX*** 429,545 ****
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   if (ost) {
XX!       for (t = 0, i= 0; i < CPUSTATES; i++)
XX! 	  t += (d[i] = h->sh->st[h->sh->idx].cp_time[i] - ost->cp_time[i]);
XX!       return ((100 * (d[CP_USER]+d[CP_NICE]+d[CP_SYS])) / t);
XX!   } else
XX!       return (0);
XX  }
XX  
XX! int fpgpgin (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_pgpgin - ost->v_pgpgin) / update : 0);
XX  }
XX  
XX! int fpgpgout (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_pgpgout - ost->v_pgpgout)
/ update : 0);
XX  }
XX  
XX! int  fpswpin (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_pswpin - ost->v_pswpin) / update : 0);
XX  }
XX  
XX! int fpswpout (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_pswpout - ost->v_pswpout)
/ update : 0);
XX  }
XX  
XX! int fintr (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_intr - ost->v_intr) / update : 0);
XX  }
XX  
XX! int fipkt (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].if_ipackets -
ost->if_ipackets) / update : 0);
XX  }
XX  
XX! int fierr (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].if_ierrors -
ost->if_ierrors) / update : 0);
XX  }
XX  
XX! int fopkt (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].if_opackets -
ost->if_opackets)/update : 0);
XX  }
XX  
XX! int foerr (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].if_oerrors -
ost->if_oerrors) / update : 0);
XX  }
XX  
XX! int fcoll (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].if_collisions -
ost->if_collisions) / update : 0);
XX  }
XX  
XX! int fswt (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX!   return (ost ? (h->sh->st[h->sh->idx].v_swtch - ost->v_swtch) / update : 0);
XX  }
XX  
XX! int fload (h, ost)
XX  
XX! METER			*h;
XX! struct statstime	*ost;
XX  
XX  {
XX    return (h->sh->st[h->sh->idx].avenrun[0]);
XX--- 427,528 ----
XX    int	t;
XX    int	d[CPUSTATES];
XX  
XX!   for (t = 0, i= 0; i < CPUSTATES; i++)
XX!       t += (d[i] = DIF (h, cp_time[i]));
XX!   return (t ? (100 * (d[CP_USER]+d[CP_NICE]+d[CP_SYS])) / t : 0);
XX  }
XX  
XX! int fpgpgin (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_pgpgin) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fpgpgout (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_pgpgout) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int  fpswpin (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_pswpin) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fpswpout (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_pswpout) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fintr (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_intr) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fipkt (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, if_ipackets) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fierr (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, if_ierrors) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fopkt (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, if_opackets) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int foerr (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, if_oerrors) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fcoll (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, if_collisions) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fswt (h)
XX  
XX! METER	*h;
XX  
XX  {
XX!   return (DIF (h, v_swtch) / DIF (h, curtime.tv_sec));
XX  }
XX  
XX! int fload (h)
XX  
XX! METER	*h;
XX  
XX  {
XX    return (h->sh->st[h->sh->idx].avenrun[0]);
XX***************
XX*** 548,554 ****
XX  /*
XX   * getmeter - Executes rstat(3) call to read statistics for specified host.
XX   *   I do all the rpc junk myself so that I have better control over timeouts
XX!  *   and retries than rstat(3) gives me.  If we're watching multiple stats
XX   *   on the same host I only do one rstat(3) call (refcnt and curcnt are
XX   *   used for this).
XX   */
XX--- 531,537 ----
XX  /*
XX   * getmeter - Executes rstat(3) call to read statistics for specified host.
XX   *   I do all the rpc junk myself so that I have better control over timeouts
XX!  *   than rstat(3) gives me.  If we're watching multiple stats
XX   *   on the same host I only do one rstat(3) call (refcnt and curcnt are
XX   *   used for this).
XX   */
XX***************
XX*** 558,565 ****
XX  
XX  {
XX    enum clnt_stat	cs;
XX-   struct statstime	*ost;
XX    register SHMETER	*sh;
XX  
XX    sh = h->sh;
XX    if (sh->curcnt >= sh->refcnt)
XX--- 541,548 ----
XX  
XX  {
XX    enum clnt_stat	cs;
XX    register SHMETER	*sh;
XX+   int			p;
XX  
XX    sh = h->sh;
XX    if (sh->curcnt >= sh->refcnt)
XX***************
XX*** 566,585 ****
XX        sh->curcnt = 0;
XX    if (!sh->curcnt++) {
XX        if (sh->clnt == NULL) {
XX!           if ((sh->addr.sin_port = getport (h)) < 0)
XX  	      return (-1);
XX            sh->s = RPC_ANYSOCK;
XX!           if (!(sh->clnt = clntudp_create (&sh->addr, RSTATPROG, RSTATVERS,
XX  					  ptto, &sh->s)))
XX  	      return (-1);
XX! 	  ost = NULL;
XX            sh->idx = 0;
XX        } else {
XX! 	  ost = &sh->st[sh->idx];
XX  	  sh->idx ^= 1;
XX        }
XX        cs = clnt_call (sh->clnt, RSTATPROC_STATS, xdr_void, 0, xdr_statstime,
XX! 		      &sh->st[sh->idx], tto);
XX        if (cs != RPC_SUCCESS) {
XX            clnt_destroy (sh->clnt);
XX            sh->clnt = NULL;
XX--- 549,569 ----
XX        sh->curcnt = 0;
XX    if (!sh->curcnt++) {
XX        if (sh->clnt == NULL) {
XX!           if ((p = getport (h)) < 0)
XX  	      return (-1);
XX+ 	  sh->addr.sin_port = p;
XX            sh->s = RPC_ANYSOCK;
XX!           if (!(sh->clnt = clntudp_create(&sh->addr, RSTATPROG, RSTATVERS_TIME,
XX  					  ptto, &sh->s)))
XX  	      return (-1);
XX! 	  sh->first = 1;
XX            sh->idx = 0;
XX        } else {
XX! 	  sh->first = 0;
XX  	  sh->idx ^= 1;
XX        }
XX        cs = clnt_call (sh->clnt, RSTATPROC_STATS, xdr_void, 0, xdr_statstime,
XX! 		      &sh->st[sh->idx], ptto);
XX        if (cs != RPC_SUCCESS) {
XX            clnt_destroy (sh->clnt);
XX            sh->clnt = NULL;
XX***************
XX*** 586,592 ****
XX            return (-1);
XX        }
XX    }
XX!   return (sh->clnt == NULL ? -1 : (sd[h->stat].val) (h, ost));
XX  }
XX  
XX  /*
XX--- 570,577 ----
XX            return (-1);
XX        }
XX    }
XX!   return (sh->first ? 0 :
XX! 		      sh->clnt == NULL ? -1 : (sd[h->stat].val) (h));
XX  }
XX  
XX  /*
XX***************
XX*** 599,605 ****
XX  {
XX    CLIENT		*c;
XX    enum clnt_stat	cs;
XX!   static struct pmap	pm = {RSTATPROG, RSTATVERS, IPPROTO_UDP, 0};
XX    short 		p;
XX    register SHMETER	*sh;
XX  
XX--- 584,590 ----
XX  {
XX    CLIENT		*c;
XX    enum clnt_stat	cs;
XX!   static struct pmap	pm = {RSTATPROG, RSTATVERS_TIME, IPPROTO_UDP, 0};
XX    short 		p;
XX    register SHMETER	*sh;
XX  
XX***************
XX*** 608,614 ****
XX    sh->addr.sin_port = htons (PMAPPORT);
XX    if (!(c = clntudp_create (&sh->addr, PMAPPROG, PMAPVERS, ptto, &sh->s)))
XX        return (-1);
XX!   cs = clnt_call (c, PMAPPROC_GETPORT, xdr_pmap, &pm, xdr_u_short, &p, tto);
XX    clnt_destroy (c);
XX    return (cs == RPC_SUCCESS ? p : -1);
XX  }
XX--- 593,599 ----
XX    sh->addr.sin_port = htons (PMAPPORT);
XX    if (!(c = clntudp_create (&sh->addr, PMAPPROG, PMAPVERS, ptto, &sh->s)))
XX        return (-1);
XX!   cs = clnt_call (c, PMAPPROC_GETPORT, xdr_pmap, &pm, xdr_u_short, &p, ptto);
XX    clnt_destroy (c);
XX    return (cs == RPC_SUCCESS ? p : -1);
XX  }
XX*** /tmp/,RCSt1a14050	Thu Jun  7 16:32:55 1990
XX--- xmeter.man	Thu Jun  7 16:13:46 1990
XX***************
XX*** 17,29 ****
XX  .PP
XX  .TP 8
XX  .B \-timeout \fIseconds\fP
XX! This option specifies the timeout between retries for rpc calls to the
XX  remote rstatd(8).  The default is 5 seconds.
XX- .PP
XX- .TP 8
XX- .B \-retries \fIinteger\fP
XX- This option specifies the total number of retries for rpc calls before
XX- assuming a host is down.  The default is 2.
XX  .PP
XX  .TP 8
XX  .B \-orientation \fIorientation\fP
XX--- 17,24 ----
XX  .PP
XX  .TP 8
XX  .B \-timeout \fIseconds\fP
XX! This option specifies the timeout between rpc calls to the
XX  remote rstatd(8).  The default is 5 seconds.
XX  .PP
XX  .TP 8
XX  .B \-orientation \fIorientation\fP
SHAR_EOF
if test 16505 -ne "`wc -c patch2`"
then
echo shar: error transmitting patch2 '(should have been 16505 characters)'
fi
#	End of shell archive
exit 0


dan
----------------------------------------------------
O'Reilly && Associates   argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.



More information about the Comp.sources.x mailing list