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 <edumazet@google.com>
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)))
}
goto Exit;
}
- if (family == PF_INET) {
+ if (family == PF_INET && preferred_family != PF_INET) {
family = PF_INET6;
goto again;
}