[PATCH mptcp-next v14 08/12] selftests: mptcp: sockopt: use unix socket instead of pipe
Geliang Tang <[email protected]> Thu, 30 Jul 2026 11:15:19 +0800
| Newsgroups | dev.linux.lists.mptcp |
|---|---|
| Message-ID | <d906ee784d437cdccc5429d57a49ad580080cd06.1785380422.git.tanggeliang@kylinos.cn> |
From: Geliang Tang <[email protected]> Replace the pipe() with socketpair(AF_UNIX, SOCK_STREAM) for inter-process communication. This prepares for upcoming patches that will require bidirectional communication and reliable EOF behavior, which a pipe does not fully support. Use SOCK_STREAM over SOCK_DGRAM (used in the original mptcp_inq.c) to reliably detect peer closure via EOF, avoiding indefinite hangs. Signed-off-by: Geliang Tang <[email protected]> --- .../selftests/net/mptcp/mptcp_sockopt.c | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c index 1d98b8d2b4a6..e404aecc7115 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -618,7 +618,7 @@ static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) do_getsockopt_mptcp_full_info(s, fd); } -static void connect_one_server(int fd, int pipefd) +static void connect_one_server(int fd, int unixfd) { char buf[4096], buf2[4096]; size_t len, i, total; @@ -643,9 +643,9 @@ static void connect_one_server(int fd, int pipefd) do_getsockopts(&s, fd, 0, 0); /* un-block server */ - ret = read(pipefd, buf2, 4); + ret = read(unixfd, buf2, 4); assert(ret == 4); - close(pipefd); + close(unixfd); assert(strncmp(buf2, "xmit", 4) == 0); @@ -698,7 +698,7 @@ static void check_stat_equal(const char *name, uint64_t actual, name, actual, expected, (int64_t)(actual - expected)); } -static void process_one_client(int fd, int pipefd) +static void process_one_client(int fd, int unixfd) { struct so_state s; char buf[4096]; @@ -708,7 +708,7 @@ static void process_one_client(int fd, int pipefd) memset(&s, 0, sizeof(s)); do_getsockopts(&s, fd, 0, 0); - ret = write(pipefd, "xmit", 4); + ret = write(unixfd, "xmit", 4); assert(ret == 4); ret = read(fd, buf, sizeof(buf)); @@ -774,7 +774,7 @@ static int xaccept(int s) return fd; } -static int server(int pipefd) +static int server(int unixfd) { int fd = -1, r; @@ -790,13 +790,13 @@ static int server(int pipefd) break; } - r = write(pipefd, "conn", 4); + r = write(unixfd, "conn", 4); assert(r == 4); alarm(15); r = xaccept(fd); - process_one_client(r, pipefd); + process_one_client(r, unixfd); close(fd); return 0; @@ -840,7 +840,7 @@ static void test_ip_tos_sockopt(int fd) xerror("expect socklen_t == -1"); } -static int client(int pipefd) +static int client(int unixfd) { int fd = -1; @@ -859,7 +859,7 @@ static int client(int pipefd) test_ip_tos_sockopt(fd); - connect_one_server(fd, pipefd); + connect_one_server(fd, unixfd); return 0; } @@ -915,35 +915,35 @@ int main(int argc, char *argv[]) { int e1, e2, wstatus; pid_t s, c, ret; - int pipefds[2]; + int unixfds[2]; parse_opts(argc, argv); init_rng(); - e1 = pipe(pipefds); + e1 = socketpair(AF_UNIX, SOCK_STREAM, 0, unixfds); if (e1 < 0) - die_perror("pipe"); + die_perror("socketpair"); s = xfork(); if (s == 0) { - close(pipefds[0]); - ret = server(pipefds[1]); - close(pipefds[1]); + close(unixfds[0]); + ret = server(unixfds[1]); + close(unixfds[1]); return ret; } - close(pipefds[1]); + close(unixfds[1]); /* wait until server bound a socket */ - e1 = read(pipefds[0], &e1, 4); + e1 = read(unixfds[0], &e1, 4); assert(e1 == 4); c = xfork(); if (c == 0) - return client(pipefds[0]); + return client(unixfds[0]); - close(pipefds[0]); + close(unixfds[0]); ret = waitpid(s, &wstatus, 0); if (ret == -1) -- 2.53.0