From defd61ca9191e0c93950e7ea5466682a67dcbafb Mon Sep 17 00:00:00 2001 From: Hannes Frederic Sowa Date: Fri, 22 Feb 2013 15:28:10 +0000 Subject: [PATCH] ss: show send queue length on unix domain sockets On sockets in listen state Send-Q reports the maximum backlog, otherwise it reports allocated socket write memory. Cc: Stephen Hemminger Signed-off-by: Hannes Frederic Sowa --- misc/ss.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/misc/ss.c b/misc/ss.c index ff7c194d..0de700a0 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -2139,7 +2139,7 @@ static int unix_show_sock(struct nlmsghdr *nlh, struct filter *f) struct rtattr *tb[UNIX_DIAG_MAX+1]; char name[128]; int peer_ino; - int rqlen; + __u32 rqlen, wqlen; parse_rtattr(tb, UNIX_DIAG_MAX, (struct rtattr*)(r+1), nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); @@ -2150,12 +2150,16 @@ static int unix_show_sock(struct nlmsghdr *nlh, struct filter *f) if (state_width) printf("%-*s ", state_width, sstate_name[r->udiag_state]); - if (tb[UNIX_DIAG_RQLEN]) - rqlen = *(int *)RTA_DATA(tb[UNIX_DIAG_RQLEN]); - else + if (tb[UNIX_DIAG_RQLEN]) { + struct unix_diag_rqlen *rql = RTA_DATA(tb[UNIX_DIAG_RQLEN]); + rqlen = rql->udiag_rqueue; + wqlen = rql->udiag_wqueue; + } else { rqlen = 0; + wqlen = 0; + } - printf("%-6d %-6d ", rqlen, 0); + printf("%-6u %-6u ", rqlen, wqlen); if (tb[UNIX_DIAG_NAME]) { int len = RTA_PAYLOAD(tb[UNIX_DIAG_NAME]);