Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Nov 2006 15:07:10 -0800
From:      "Josh Carroll" <josh.carroll@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: sockstat tcp/udp switches
Message-ID:  <8cb6106e0611021507n6315b629kad8cbbf901343c2@mail.gmail.com>
In-Reply-To: <20061102094748.G75543@mignon.ki.iif.hu>
References:  <8cb6106e0610311058s7144d38bp2b1dafd114e2b433@mail.gmail.com> <20061102094748.G75543@mignon.ki.iif.hu>

next in thread | previous in thread | raw e-mail | index | archive | help
>         I haven't tested yet, but I think in the options structure you
> should use :
>
> +                             {"ipv6", 0, NULL, '6'},
>
> instead of:
> +                             {"ipv6", 0, NULL, 0},

Oops, thanks for catching that. Fixed that in the new patch below.

> also for portability you should use:
> no_argument or required_argument as a second field....

Thank you for the feedback, I've modified that and the new patch is below.

Thanks,
Josh



--- sockstat.c.orig	Thu Nov  2 15:01:16 2006
+++ sockstat.c	Thu Nov  2 15:02:32 2006
@@ -58,6 +58,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <getopt.h>

 static int	 opt_4;		/* Show IPv4 sockets */
 static int	 opt_6;		/* Show IPv6 sockets */
@@ -65,6 +66,8 @@
 static int	 opt_l;		/* Show listening sockets */
 static int	 opt_u;		/* Show Unix domain sockets */
 static int	 opt_v;		/* Verbose mode */
+static int	 opt_tcp;		/* show tcp */
+static int	 opt_udp;		/* show udp */

 static int	*ports;

@@ -584,8 +587,20 @@
 main(int argc, char *argv[])
 {
 	int o;
+	static struct option options[] = {
+				{"ipv4", no_argument, NULL, '4'},
+				{"ipv6", no_argument, NULL, '6'},
+				{"connected", no_argument, NULL, 'c'},
+				{"listening", no_argument, NULL, 'l'},
+				{"unix", no_argument, NULL, 'u'},
+				{"verbose", no_argument, NULL, 'v'},
+				{"port", required_argument, NULL, 'p'},
+				{"tcp", no_argument, NULL, 't'},
+				{"udp", no_argument, NULL, 'd'},
+				{NULL, 0, NULL, 0}
+	};

-	while ((o = getopt(argc, argv, "46clp:uv")) != -1)
+	while ((o = getopt_long_only(argc, argv, "46clp:uvtd", options, NULL)) != -1)
 		switch (o) {
 		case '4':
 			opt_4 = 1;
@@ -608,6 +623,12 @@
 		case 'v':
 			++opt_v;
 			break;
+		case 't':
+			opt_tcp = 1;
+			break;
+		case 'd':
+			opt_udp = 1;
+			break;
 		default:
 			usage();
 		}
@@ -618,20 +639,35 @@
 	if (argc > 0)
 		usage();

-	if (!opt_4 && !opt_6 && !opt_u)
-		opt_4 = opt_6 = opt_u = 1;
+	if (!opt_4 && !opt_6) {
+		opt_4 = opt_6 = 1;
+		
+		if(!opt_u) {
+			if(opt_tcp || opt_udp)
+				opt_u = 0;
+		} else {
+			opt_4 = opt_6 = opt_u = 1;
+		}
+	}
+
 	if (!opt_c && !opt_l)
 		opt_c = opt_l = 1;

+	if(!opt_tcp && !opt_udp)
+		opt_tcp = opt_udp = 1;
+
 	if (opt_4 || opt_6) {
-		gather_inet(IPPROTO_TCP);
-		gather_inet(IPPROTO_UDP);
+		if(opt_tcp)
+			gather_inet(IPPROTO_TCP);
+		if(opt_udp)
+			gather_inet(IPPROTO_UDP);
 		gather_inet(IPPROTO_DIVERT);
 	}
 	if (opt_u) {
 		gather_unix(SOCK_STREAM);
 		gather_unix(SOCK_DGRAM);
 	}
+
 	getfiles();
 	display();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8cb6106e0611021507n6315b629kad8cbbf901343c2>