Re: [iproute PATCH v3 2/2] ss: support closing inet sockets via SOCK_DESTROY.

Lorenzo Colitti
2016-01-04T01:54:53Z

On Thu, Dec 31, 2015 at 5:34 AM, Stephen Hemminger
<stephen@networkplumber.org> wrote:
>> + req.nlh.nlmsg_type = SOCK_DESTROY;
>> + req.nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
>> + req.nlh.nlmsg_seq = ++rth->seq;
>> + req.r.sdiag_family = d->idiag_family;
>> + req.r.sdiag_protocol = diag_arg->protocol;
>> + req.r.id = d->id;
>> +
>> + return rtnl_send_check_ack(rth, &req.nlh, req.nlh.nlmsg_len, 1);
>
> Just use rtnl_talk() instead, it does request/reply.

The reason I did not use rtnl_talk is that it prints all errors to
stderr. This does not
fit well with SOCK_DESTROY, for which it is expected that some
operations will fail.

For example, if you type "ss -a -K dport = :443", you probably don't
want to see one "RTNETLINK answers: Operation not supported" error for
every TIME-WAIT socket to port 443, and you don't want to see
"RTNETLINK answers: No such file or directory" if one of those sockets
happens to be closed during the scan. Silently ignoring these errors
seemed best.

I could also add a parameter to rtnl_talk to suppress printing errors,
though the patch to do so would be roughly equivalent to the patch
where I added rtnl_send_check_ack. I can also just use rtnl_talk as
you suggest and not care about the errors.

Let me know what you prefer.