Hi Matt, On Sat, 2026-08-15 at 00:28 +0200, Matthieu Baerts (NGI0) wrote: > In case of poll timeout, it might be too late to print the stats > after > the socket closure. > > Now, in case of poll timeout, 'ss' and 'nstat' are invoked from > mptcp_connect to print the stats before exiting. This should help > debugging poll timeout issues. > > Note: for this "workaround", system() is used for debugging purposes This print_err_stats() implementation is basically the same as mptcp_lib_pr_err_stats() in the shell, right? I think it's better to use mptcp_lib_pr_err_stats() in the shell to print the information. In mptcp_connect.c, when a poll timeout occurs, we send a signal to the shell and don't close the socket immediately - we wait for the shell to finish printing the information before closing it. What do you think of this approach? There's a reference implementation in the attachment, but I haven't tested it. Thanks, -Geliang > only. The returned result can then be safely ignored, hence the > (void)! > to avoid unused-result warnings. > > Also, 'nstat *Tcp*' will print '#kernel' at the top, but that's OK, > and > it seems better to avoid using a pipe here. > > Signed-off-by: Matthieu Baerts (NGI0) > --- > Changes in v3: > - use double quotes instead of single ones (Sashiko) > - Link to v2: > https://patch.msgid.link/20260814-sft-mptcp-stats-b4-close-v2-1-b7a8ab3ddae8@kernel.org > > Changes in v2: > - use 'ip netns identify' to avoid a warning from AI reviews > - use 'nstat -s *Tcp*' instead of using grep > - add a note about (void)! > - Link to v1: > https://patch.msgid.link/20260814-sft-mptcp-stats-b4-close-v1-1-2945a591be7e@kernel.org > --- >  tools/testing/selftests/net/mptcp/mptcp_connect.c | 15 > +++++++++++++++ >  1 file changed, 15 insertions(+) > > diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c > b/tools/testing/selftests/net/mptcp/mptcp_connect.c > index ea4cb6c1bd5e..d6c2237bdba0 100644 > --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c > +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c > @@ -210,6 +210,19 @@ static void xgetaddrinfo(const char *node, const > char *service, >   } >  } >   > +static void print_err_stats(void) > +{ > + char cmd[128]; > + > + snprintf(cmd, sizeof(cmd), "ss -Menitam -o '%cport = :%s' > >&2", > + listen_mode ? 's' : 'd', cfg_port); > + > + fprintf(stderr, "socket stats before socket closure:\n"); > + (void)!system(cmd); > + (void)!system("NSTAT_HISTORY=\"/tmp/$(ip netns > identify).nstat\" " > +       "nstat -s '*Tcp*' >&2"); > +} > + >  static void set_rcvbuf(int fd, unsigned int size) >  { >   int err; > @@ -656,6 +669,7 @@ static int copyfd_io_poll(int infd, int peerfd, > int outfd, >   fprintf(stderr, "%s: poll timed out (events: > " >   "POLLIN %u, POLLOUT %u)\n", > __func__, >   fds.events & POLLIN, fds.events & > POLLOUT); > + print_err_stats(); >   return 2; >   } >   > @@ -1194,6 +1208,7 @@ int main_loop_s(int listensock) >   return 1; >   case 0: >   fprintf(stderr, "%s: timed out\n", __func__); > + print_err_stats(); >   close(listensock); >   return 2; >   } > > --- > base-commit: d536472a82d18356d323227213acb5603bb9050c > change-id: 20260814-sft-mptcp-stats-b4-close-20964ff6a6ba > > Best regards, > --  > Matthieu Baerts (NGI0) >