On Thu, Dec 31, 2015 at 5:34 AM, Stephen Hemminger <step...@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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html