From 518af1e0b14cdc8eeac4db313767f5d1dfd1fce1 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Fri, 29 May 2015 05:37:49 -0700 Subject: [PATCH] ss: do not bindly dump two families ss currently dumps IPv4 sockets, then IPv6 sockets from the kernel, even if -4 or -6 option was given. Filtering in user space then has to drop all sockets of wrong family. Such a waste of time... Before : $ time ss -tn -4 | wc -l 251659 real 0m1.241s user 0m0.423s sys 0m0.806s After: $ time ss -tn -4 | wc -l 251672 real 0m0.779s user 0m0.412s sys 0m0.386s Signed-off-by: Eric Dumazet --- misc/ss.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/ss.c b/misc/ss.c index 68bffe28..1f4a30f7 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -2199,6 +2199,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol) return -1; rth.dump = MAGIC_SEQ; rth.dump_fp = dump_fp; + if (preferred_family == PF_INET6) + family = PF_INET6; again: if ((err = sockdiag_send(family, rth.fd, protocol, f))) @@ -2211,7 +2213,7 @@ again: } goto Exit; } - if (family == PF_INET) { + if (family == PF_INET && preferred_family != PF_INET) { family = PF_INET6; goto again; }