summaryrefslogtreecommitdiffstats
path: root/usr.bin/sockstat
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2001-03-06 13:48:38 +0000
committerdes <des@FreeBSD.org>2001-03-06 13:48:38 +0000
commitd57c826a42def50a6b1dbad159ce2b5ad7ed9873 (patch)
tree425d27f24c40165aa372797c5b828990d9d955b6 /usr.bin/sockstat
parent2f5206c0e8f6e5f823b09dc7f79544602d132195 (diff)
downloadFreeBSD-src-d57c826a42def50a6b1dbad159ce2b5ad7ed9873.zip
FreeBSD-src-d57c826a42def50a6b1dbad159ce2b5ad7ed9873.tar.gz
Add (and document) options for showing only listening or connected sockets.
Diffstat (limited to 'usr.bin/sockstat')
-rw-r--r--usr.bin/sockstat/sockstat.125
-rw-r--r--usr.bin/sockstat/sockstat.pl25
2 files changed, 39 insertions, 11 deletions
diff --git a/usr.bin/sockstat/sockstat.1 b/usr.bin/sockstat/sockstat.1
index 1cc0bf4..eca1f75 100644
--- a/usr.bin/sockstat/sockstat.1
+++ b/usr.bin/sockstat/sockstat.1
@@ -35,7 +35,7 @@
.Nd list open sockets
.Sh SYNOPSIS
.Nm
-.Op Fl 46u
+.Op Fl 46clu
.Sh DESCRIPTION
The
.Nm
@@ -47,13 +47,30 @@ The following options are available:
Show AF_INET (IPv4) sockets.
.It Fl 6
Show AF_INET6 (IPv6) sockets.
+.It Fl c
+Show connected sockets.
+.It Fl l
+Show listening sockets.
.It Fl u
Show AF_LOCAL (Unix) sockets.
.El
.Pp
-If no option is specified,
+If neither
+.Fl 4 ,
+.Fl 6
+or
+.Fl u
+is specified,
.Nm
-will list sockets of all three types.
+will list sockets in all three domains.
+.Pp
+If neither
+.Fl c
+or
+.Fl l
+is specified,
+.Nm
+will list both listening and connected sockets.
.Pp
The information listed for each
socket is:
@@ -71,7 +88,7 @@ The transport protocol associated with the socket for Internet
sockets, or the type of socket (stream or datagram) for Unix sockets.
.It Li ADDRESS
(Unix sockets only)
-For listening sockets, this is the filename of the socket.
+For bound sockets, this is the filename of the socket.
For other sockets, it is the name, PID and file descriptor number of
the peer, or "(none)" if the socket is neither bound nor connected.
.It Li LOCAL ADDRESS
diff --git a/usr.bin/sockstat/sockstat.pl b/usr.bin/sockstat/sockstat.pl
index aa5e5a8..5ac1cc9 100644
--- a/usr.bin/sockstat/sockstat.pl
+++ b/usr.bin/sockstat/sockstat.pl
@@ -95,8 +95,10 @@ sub addr($) {
#
# Print information about Internet sockets
#
-sub print_inet($) {
+sub print_inet($$$) {
my $af = shift; # Address family
+ my $conn = shift || 0; # Show connected sockets
+ my $listen = shift || 0; # Show listen sockets
my $fsd; # Fstat data
my $nsd; # Netstat data
@@ -106,6 +108,8 @@ sub print_inet($) {
foreach $fsd (@{$fstat{$af}}) {
next unless defined($fsd->[7]);
$nsd = $netstat{$fsd->[7]} || $unknown;
+ next if (!$conn && $nsd->[5] ne '*.*');
+ next if (!$listen && $nsd->[5] eq '*.*');
printf($inet_fmt, $fsd->[0], $fsd->[1], $fsd->[2],
substr($fsd->[3], 0, -1),
$nsd->[1], addr($nsd->[4]), addr($nsd->[5]));
@@ -116,7 +120,9 @@ sub print_inet($) {
#
# Print information about Unix domain sockets
#
-sub print_unix() {
+sub print_unix($$) {
+ my $conn = shift || 0; # Show connected sockets
+ my $listen = shift || 0; # Show listen sockets
my %endpoint; # Mad PCB to process/fd
my $fsd; # Fstat data
@@ -129,6 +135,8 @@ sub print_unix() {
printf($unix_fmt, "USER", "COMMAND", "PID", "FD", "PROTO", "ADDRESS");
foreach $fsd (@{$fstat{"local"}}) {
next unless defined($fsd->[6]);
+ next if (!$conn && defined($fsd->[8]));
+ next if (!$listen && !defined($fsd->[8]));
$nsd = $netstat{$fsd->[6]} || $unknown;
printf($unix_fmt, $fsd->[0], $fsd->[1], $fsd->[2],
substr($fsd->[3], 0, -1), $fsd->[5],
@@ -141,14 +149,14 @@ sub print_unix() {
# Print usage message and exit
#
sub usage() {
- print(STDERR "Usage: sockstat [-46u]\n");
+ print(STDERR "Usage: sockstat [-46clu]\n");
exit(1);
}
MAIN:{
my %opts; # Command-line options
- getopts("46u", \%opts)
+ getopts("46clu", \%opts)
or usage();
gather();
@@ -156,14 +164,17 @@ MAIN:{
if (!$opts{'4'} && !$opts{'6'} && !$opts{'u'}) {
$opts{'4'} = $opts{'6'} = $opts{'u'} = 1;
}
+ if (!$opts{'c'} && !$opts{'l'}) {
+ $opts{'c'} = $opts{'l'} = 1;
+ }
if ($opts{'4'}) {
- print_inet("internet");
+ print_inet("internet", $opts{'c'}, $opts{'l'});
}
if ($opts{'6'}) {
- print_inet("internet6");
+ print_inet("internet6", $opts{'c'}, $opts{'l'});
}
if ($opts{'u'}) {
- print_unix();
+ print_unix($opts{'c'}, $opts{'l'});
}
exit(0);
OpenPOWER on IntegriCloud