From patchwork Fri Sep 2 01:17:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963490 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DDA98ECAAD2 for ; Fri, 2 Sep 2022 01:18:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233871AbiIBBSE (ORCPT ); Thu, 1 Sep 2022 21:18:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232758AbiIBBSE (ORCPT ); Thu, 1 Sep 2022 21:18:04 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D64F78BCA for ; Thu, 1 Sep 2022 18:18:03 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id EDCD480C19; Fri, 2 Sep 2022 01:17:59 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081483; bh=1TE1GHzigpzQDCdNCY36kIyOGLAC2Vz4T/RbbxKeJqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WShROCcT1f546rnDZbY29JxyJdpF99IGa6W3wAJo4XN6J0eFQY/Dt0bevvjfi7ZY5 hqSHJb1Ju1GBlvebxAg0zsiw5+gNNY6/lQIx/KfemUuVbl+znUlTMJr+UDRQuES8Il 3QiCwsLtNCWchoV6mFR6mHvfvlbYUskXCY5C6b365mCSZznhYbIX889z7/qkHwWcih DCJ4I5Dgjehefbjq6zEtNweB9xv2U69DS4OVZDb55MhtDwd4yrfjvID0lQDRnAAnuM EVbFVj6snBjDjeYvHdSS/yp1Vq9NQmI8mnzkXgFEPVl1MCOaYJgquZvKcl2XF+yBgR 2gHBeD48ExopA== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 01/12] test/helpers: Add `t_bind_ephemeral_port()` function Date: Fri, 2 Sep 2022 08:17:41 +0700 Message-Id: <20220902011548.2506938-2-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi This is a prep patch to fix an intermittent issue with the port number. We have many places where we need to bind() a socket to any unused port number. To achieve that, the current approach does one of the following mechanisms: 1) Randomly brute force the port number until the bind() syscall succeeds. 2) Use a static port at compile time (randomly chosen too). This is not reliable and it results in an intermittent issue (test fails when the selected port is in use). Setting @addr->sin_port to zero on a bind() syscall lets the kernel choose a port number that is not in use. The caller then can know the port number to be bound by invoking a getsockname() syscall after bind() succeeds. Wrap this procedure in a new function called t_bind_ephemeral_port(). The selected port will be returned into @addr->sin_port, the caller can use it later to connect() or whatever they need. Link: https://lore.kernel.org/r/918facd1-78ba-2de7-693a-5f8c65ea2fcd@gnuweeb.org Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/helpers.c | 18 ++++++++++++++++++ test/helpers.h | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/test/helpers.c b/test/helpers.c index 0146533..4d5c402 100644 --- a/test/helpers.c +++ b/test/helpers.c @@ -19,24 +19,42 @@ /* * Helper for allocating memory in tests. */ void *t_malloc(size_t size) { void *ret; ret = malloc(size); assert(ret); return ret; } +/* + * Helper for binding socket to an ephemeral port. + * The port number to be bound is returned in @addr->sin_port. + */ +int t_bind_ephemeral_port(int fd, struct sockaddr_in *addr) +{ + socklen_t addrlen; + + addr->sin_port = 0; + if (bind(fd, (struct sockaddr *)addr, sizeof(*addr))) + return -errno; + + addrlen = sizeof(*addr); + assert(!getsockname(fd, (struct sockaddr *)addr, &addrlen)); + assert(addr->sin_port != 0); + return 0; +} + /* * Helper for allocating size bytes aligned on a boundary. */ void t_posix_memalign(void **memptr, size_t alignment, size_t size) { int ret; ret = posix_memalign(memptr, alignment, size); assert(!ret); } /* * Helper for allocating space for an array of nmemb elements diff --git a/test/helpers.h b/test/helpers.h index 6d5726c..9ad9947 100644 --- a/test/helpers.h +++ b/test/helpers.h @@ -13,24 +13,31 @@ extern "C" { enum t_setup_ret { T_SETUP_OK = 0, T_SETUP_SKIP, }; enum t_test_result { T_EXIT_PASS = 0, T_EXIT_FAIL = 1, T_EXIT_SKIP = 77, }; +/* + * Helper for binding socket to an ephemeral port. + * The port number to be bound is returned in @addr->sin_port. + */ +int t_bind_ephemeral_port(int fd, struct sockaddr_in *addr); + + /* * Helper for allocating memory in tests. */ void *t_malloc(size_t size); /* * Helper for allocating size bytes aligned on a boundary. */ void t_posix_memalign(void **memptr, size_t alignment, size_t size); From patchwork Fri Sep 2 01:17:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963491 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1B2FECAAD3 for ; Fri, 2 Sep 2022 01:18:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234732AbiIBBSI (ORCPT ); Thu, 1 Sep 2022 21:18:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235151AbiIBBSH (ORCPT ); Thu, 1 Sep 2022 21:18:07 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12FD278BC6 for ; Thu, 1 Sep 2022 18:18:07 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id A093080BC2; Fri, 2 Sep 2022 01:18:03 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081486; bh=NdcWOVgA/+JNXYgu2bfVYwufZVhddbidhJxVIINy8VA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MOoAWQ/s4hr7w1lMCyBqk76DoTgplDYi2jK/vrsDyoHGUMd4dh8DL/UWBeEy65olk MSAB3l6/uXTLAmfvQx4oXjooLTCbUUUV72umtBPSlOlK6dZ6dJX7RwAFCIA8MVArP2 Ok6+YjPifItzDF4MvbNS5tm804MmSGhJgxifrWaz1L8M0JVJ7n5pIiosfgtLd3dF1f 18fxgJ9Gb8WILuA5mikVey0ROhr4G5sRdbRavDVdfyrWiIWijBeApEPR4UogFHMjch XAnBRmax+Kqu2fkoI0On7E296sd/WWu+g2YAMzhZEDXcELbfQY9t9XcLWYCyTRXio6 y93LjzShZPbzg== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 02/12] t/poll-link: Don't brute force the port number Date: Fri, 2 Sep 2022 08:17:42 +0700 Message-Id: <20220902011548.2506938-3-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't brute force the port number, use `t_bind_ephemeral_port()`, much simpler and reliable for choosing a port number that is not in use. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/poll-link.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/test/poll-link.c b/test/poll-link.c index 197ad77..a6fe0de 100644 --- a/test/poll-link.c +++ b/test/poll-link.c @@ -4,24 +4,25 @@ #include #include #include #include #include #include #include #include #include #include #include +#include "helpers.h" #include "liburing.h" pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static int recv_thread_ready = 0; static int recv_thread_done = 0; static void signal_var(int *var) { pthread_mutex_lock(&mutex); *var = 1; @@ -80,45 +81,37 @@ void *recv_thread(void *arg) ret = io_uring_queue_init(8, &ring, 0); assert(ret == 0); int s0 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); assert(s0 != -1); int32_t val = 1; ret = setsockopt(s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); - struct sockaddr_in addr; + struct sockaddr_in addr = { }; addr.sin_family = AF_INET; data->addr = inet_addr("127.0.0.1"); addr.sin_addr.s_addr = data->addr; - i = 0; - do { - data->port = htons(1025 + (rand() % 64510)); - addr.sin_port = data->port; - - if (bind(s0, (struct sockaddr*)&addr, sizeof(addr)) != -1) - break; - } while (++i < 100); - - if (i >= 100) { - fprintf(stderr, "Can't find good port, skipped\n"); + if (t_bind_ephemeral_port(s0, &addr)) { + perror("bind"); data->stop = 1; signal_var(&recv_thread_ready); - goto out; + goto err; } + data->port = addr.sin_port; ret = listen(s0, 128); assert(ret != -1); signal_var(&recv_thread_ready); sqe = io_uring_get_sqe(&ring); assert(sqe != NULL); io_uring_prep_poll_add(sqe, s0, POLLIN | POLLHUP | POLLERR); sqe->flags |= IOSQE_IO_LINK; sqe->user_data = 1; @@ -149,25 +142,24 @@ void *recv_thread(void *arg) (uint64_t) cqe->user_data, cqe->res, data->expected[idx]); goto err; } else if (!data->is_mask[idx] && cqe->res != data->expected[idx]) { fprintf(stderr, "cqe %" PRIu64 " got %d, wanted %d\n", (uint64_t) cqe->user_data, cqe->res, data->expected[idx]); goto err; } io_uring_cqe_seen(&ring, cqe); } -out: signal_var(&recv_thread_done); close(s0); io_uring_queue_exit(&ring); return NULL; err: signal_var(&recv_thread_done); close(s0); io_uring_queue_exit(&ring); return (void *) 1; } static int test_poll_timeout(int do_connect, unsigned long timeout) From patchwork Fri Sep 2 01:17:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963492 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1AE18ECAAD2 for ; Fri, 2 Sep 2022 01:18:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235151AbiIBBSP (ORCPT ); Thu, 1 Sep 2022 21:18:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235167AbiIBBSL (ORCPT ); Thu, 1 Sep 2022 21:18:11 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF2D1A3D5C for ; Thu, 1 Sep 2022 18:18:10 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 59E6E80C19; Fri, 2 Sep 2022 01:18:07 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081490; bh=KoJLZCOZpW4i2JyML4Rng3L4f+a0ef7DGJve5pJ48ik=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sV0Q/iPaUbqF85ibtGiT4jMfhAZaeBhSttSPCTuLM2oFjq2pO+nKDZanCh1l9Vetg AUNpwVgYIw9RNd1vmt9OPgeoMIPmTfcDyeWbfYhcSeKFrsAl7NCApnre50mVoijXEm pQzjdXIkizncM35xqzEIaOoPsOwdBBTBeoWFUzaGt+AqxINFYq6am0nIriy9OsySm2 SjUx0aewOfqjQSHGY7PW15QSIH3UmrGCrSii+pnT7TOb5rsMMD5iSysjdaoHe+Maf3 CywK91BsoSHfbTzWP2PQYPVV31f3QqT6/6Xok2JbfvYMPnJdUknhYUiB3SbVisgdgR sFgAQCVJ2etnQ== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 03/12] t/socket-rw: Don't brute force the port number Date: Fri, 2 Sep 2022 08:17:43 +0700 Message-Id: <20220902011548.2506938-4-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't brute force the port number, use `t_bind_ephemeral_port()`, much simpler and reliable for choosing a port number that is not in use. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/socket-rw.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/test/socket-rw.c b/test/socket-rw.c index 4fbf032..6211b01 100644 --- a/test/socket-rw.c +++ b/test/socket-rw.c @@ -11,58 +11,49 @@ #include #include #include #include #include #include #include #include #include #include "liburing.h" +#include "helpers.h" int main(int argc, char *argv[]) { int p_fd[2], ret; int32_t recv_s0; int32_t val = 1; struct sockaddr_in addr; struct iovec iov_r[1], iov_w[1]; if (argc > 1) return 0; srand(getpid()); recv_s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - - do { - addr.sin_port = htons((rand() % 61440) + 4096); - ret = bind(recv_s0, (struct sockaddr*)&addr, sizeof(addr)); - if (!ret) - break; - if (errno != EADDRINUSE) { - perror("bind"); - exit(1); - } - } while (1); + assert(!t_bind_ephemeral_port(recv_s0, &addr)); ret = listen(recv_s0, 128); assert(ret != -1); p_fd[1] = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); val = 1; ret = setsockopt(p_fd[1], IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); assert(ret != -1); int32_t flags = fcntl(p_fd[1], F_GETFL, 0); assert(flags != -1); From patchwork Fri Sep 2 01:17:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963493 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9B7EFECAAD3 for ; Fri, 2 Sep 2022 01:18:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235167AbiIBBSQ (ORCPT ); Thu, 1 Sep 2022 21:18:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55612 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235163AbiIBBSP (ORCPT ); Thu, 1 Sep 2022 21:18:15 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A176A78BCA for ; Thu, 1 Sep 2022 18:18:14 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 0D1D580C08; Fri, 2 Sep 2022 01:18:10 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081494; bh=4MZXfixg1NCvJnq4M9YpbAK8XGs1p4FM8V3vnhRjlYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cUyVPeraDjEM5x74o0luFq/V8KonDL+IYiKZZ44KsqVVP+qI+gc75exVvh+wgu3ZI DcTy2FFYWCabGvjzcvq4JQU4RPOYGRhmQMZ5lg8i9Pzk1WKlTYGxI2UjAt/NUlYnGE 4hV3NpEb0bI9Gz/XhqtaTkyJPb0aSDoIfqChVK7ZAdoT0hYiN+xxVBCnzC9p6VvyK/ 9uiVQaDUTTlsv7MDyC5BPdhT4FdmWXaBlSOmvJIn+P3OrPHQimEyTm6JQ6pdWkY1cC MiQhszYzMxDt5YHlkN7RQHIsZjP0SSMR6oqDm29lR+8cvJjkgBwMn3Baq5jrGdppAn BmZqHDJO0/slw== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 04/12] t/socket-rw-eagain: Don't brute force the port number Date: Fri, 2 Sep 2022 08:17:44 +0700 Message-Id: <20220902011548.2506938-5-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't brute force the port number, use `t_bind_ephemeral_port()`, much simpler and reliable for choosing a port number that is not in use. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/socket-rw-eagain.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/test/socket-rw-eagain.c b/test/socket-rw-eagain.c index 2d6a817..a12c70d 100644 --- a/test/socket-rw-eagain.c +++ b/test/socket-rw-eagain.c @@ -9,59 +9,49 @@ #include #include #include #include #include #include #include #include #include #include "liburing.h" +#include "helpers.h" int main(int argc, char *argv[]) { int p_fd[2], ret; int32_t recv_s0; int32_t val = 1; struct sockaddr_in addr; struct iovec iov_r[1], iov_w[1]; if (argc > 1) return 0; srand(getpid()); recv_s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - - do { - addr.sin_port = htons((rand() % 61440) + 4096); - ret = bind(recv_s0, (struct sockaddr*)&addr, sizeof(addr)); - if (!ret) - break; - if (errno != EADDRINUSE) { - perror("bind"); - exit(1); - } - } while (1); - + assert(!t_bind_ephemeral_port(recv_s0, &addr)); ret = listen(recv_s0, 128); assert(ret != -1); p_fd[1] = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); val = 1; ret = setsockopt(p_fd[1], IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); assert(ret != -1); int32_t flags = fcntl(p_fd[1], F_GETFL, 0); assert(flags != -1); From patchwork Fri Sep 2 01:17:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963494 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AAD2FECAAD3 for ; Fri, 2 Sep 2022 01:18:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232782AbiIBBSU (ORCPT ); Thu, 1 Sep 2022 21:18:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234698AbiIBBST (ORCPT ); Thu, 1 Sep 2022 21:18:19 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EDF05A3D5C for ; Thu, 1 Sep 2022 18:18:18 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id D7D3280BAE; Fri, 2 Sep 2022 01:18:14 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081498; bh=5BqT3slwT3fHxa5r0dGJXvXj9KMzEoJox4VMoAXlKHo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=paf94rR0OFXmV137EAVsj40V2EZbSeq9y24LQQsbtk89r9mM3Gg4OfrWMSpXrF4EX 7ZtvlcPTsMJUhoOczBeT+uWDn25vzlxV8wZ9Xm2vFhPjShq3/G6ntvOU8eoLycOgTX qAiPJay/K6/TTl/CM1/0K6klFn1qM4Pp83osFfRotYvuw8tT9UjbtamWZtJvMQ+Joa jdHVTabyTuFL5JnIO1oMrQWKTsxEitXoEjE1iv/UL8Ochll7z8ddQMozM+zFia/B0O DyD1AhEnkmHrY1L2jfxCvImdmgnw2pYdILK3SF07ulymWioycN3ZCVgVq4B5rvfKx+ tv69I3BKFXoQQ== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 05/12] t/socket-rw-offset: Don't brute force the port number Date: Fri, 2 Sep 2022 08:17:45 +0700 Message-Id: <20220902011548.2506938-6-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't brute force the port number, use `t_bind_ephemeral_port()`, much simpler and reliable for choosing a port number that is not in use. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/socket-rw-offset.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/test/socket-rw-offset.c b/test/socket-rw-offset.c index 987b6c9..c422442 100644 --- a/test/socket-rw-offset.c +++ b/test/socket-rw-offset.c @@ -11,58 +11,49 @@ #include #include #include #include #include #include #include #include #include #include "liburing.h" +#include "helpers.h" int main(int argc, char *argv[]) { int p_fd[2], ret; int32_t recv_s0; int32_t val = 1; struct sockaddr_in addr; struct iovec iov_r[1], iov_w[1]; if (argc > 1) return 0; srand(getpid()); recv_s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - - do { - addr.sin_port = htons((rand() % 61440) + 4096); - ret = bind(recv_s0, (struct sockaddr*)&addr, sizeof(addr)); - if (!ret) - break; - if (errno != EADDRINUSE) { - perror("bind"); - exit(1); - } - } while (1); + assert(!t_bind_ephemeral_port(recv_s0, &addr)); ret = listen(recv_s0, 128); assert(ret != -1); p_fd[1] = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); val = 1; ret = setsockopt(p_fd[1], IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); assert(ret != -1); int32_t flags = fcntl(p_fd[1], F_GETFL, 0); assert(flags != -1); From patchwork Fri Sep 2 01:17:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963495 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41B4BECAAD3 for ; Fri, 2 Sep 2022 01:18:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234299AbiIBBS0 (ORCPT ); Thu, 1 Sep 2022 21:18:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234572AbiIBBSZ (ORCPT ); Thu, 1 Sep 2022 21:18:25 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C56CA5C7A for ; Thu, 1 Sep 2022 18:18:23 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 5381380927; Fri, 2 Sep 2022 01:18:19 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081502; bh=4ZRPWkdArbg7F0Dd1BU/wZj++4oPm5+IG+qHvo4RewM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=obISpPmhbNgizCNr2Op0L6+tCuZRhpI3IBGhdWFuEyIHrn6/jjJoB60Gl7v7vpsIM IjPuXx1ets7zK5zFGMfMgMUiqXOEzRXhicYTawlaU6tmxoFDXsnkDG6ztfW/jOhpkE dJlVz3vK3GeONtmh9f6yMF2LuOJafQp0P3L2OUoODVy/gusJKIn03dh5DAxjERYw8f k1i0DY2IyOGwzs1kBLeWlLQq/b3JgSE1hSirFx8AtpgXY08hgz7cgO2OreexA48den ypa/aZRFrOLkmG4Ts8YTfOYERNE2tnq8+U45GnCYsedPZw1MCyyd+ByxboAJo6ljZA clecM+d8UvQWA== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 06/12] t/files-exit-hang-poll: Don't brute force the port number Date: Fri, 2 Sep 2022 08:17:46 +0700 Message-Id: <20220902011548.2506938-7-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't brute force the port number, use `t_bind_ephemeral_port()`, much simpler and reliable for choosing a port number that is not in use. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi Reviewed-by: Alviro Iskandar Setiawan --- test/files-exit-hang-poll.c | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/test/files-exit-hang-poll.c b/test/files-exit-hang-poll.c index 0c609f1..04febc8 100644 --- a/test/files-exit-hang-poll.c +++ b/test/files-exit-hang-poll.c @@ -10,26 +10,24 @@ #include #include #include #include #include #include #include #include "liburing.h" #include "helpers.h" #define BACKLOG 512 -#define PORT 9100 - static struct io_uring ring; static void add_poll(struct io_uring *ring, int fd) { struct io_uring_sqe *sqe; sqe = io_uring_get_sqe(ring); io_uring_prep_poll_add(sqe, fd, POLLIN); sqe->flags |= IOSQE_IO_LINK; } static void add_accept(struct io_uring *ring, int fd) @@ -55,55 +53,43 @@ static int setup_io_uring(void) static void alarm_sig(int sig) { exit(0); } int main(int argc, char *argv[]) { struct sockaddr_in serv_addr; struct io_uring_cqe *cqe; int ret, sock_listen_fd; const int val = 1; - int i; if (argc > 1) return T_EXIT_SKIP; sock_listen_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); if (sock_listen_fd < 0) { perror("socket"); return T_EXIT_FAIL; } setsockopt(sock_listen_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; - for (i = 0; i < 100; i++) { - serv_addr.sin_port = htons(PORT + i); - - ret = bind(sock_listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); - if (!ret) - break; - if (errno != EADDRINUSE) { - fprintf(stderr, "bind: %s\n", strerror(errno)); - return T_EXIT_FAIL; - } - if (i == 99) { - printf("Gave up on finding a port, skipping\n"); - goto skip; - } + if (t_bind_ephemeral_port(sock_listen_fd, &serv_addr)) { + perror("bind"); + return T_EXIT_FAIL; } if (listen(sock_listen_fd, BACKLOG) < 0) { perror("Error listening on socket\n"); return T_EXIT_FAIL; } if (setup_io_uring()) return T_EXIT_FAIL; add_poll(&ring, sock_listen_fd); add_accept(&ring, sock_listen_fd); @@ -116,16 +102,13 @@ int main(int argc, char *argv[]) signal(SIGALRM, alarm_sig); alarm(1); ret = io_uring_wait_cqe(&ring, &cqe); if (ret) { fprintf(stderr, "wait_cqe=%d\n", ret); return T_EXIT_FAIL; } io_uring_queue_exit(&ring); return T_EXIT_PASS; -skip: - io_uring_queue_exit(&ring); - return T_EXIT_SKIP; } From patchwork Fri Sep 2 01:17:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963496 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BABBAECAAD3 for ; Fri, 2 Sep 2022 01:18:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235177AbiIBBSp (ORCPT ); Thu, 1 Sep 2022 21:18:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55838 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235179AbiIBBS2 (ORCPT ); Thu, 1 Sep 2022 21:18:28 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87AE5A61C2 for ; Thu, 1 Sep 2022 18:18:27 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 75AFC809E3; Fri, 2 Sep 2022 01:18:23 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081506; bh=Ii1/yIkdI8+/V8GiQ7qvrlnDqibwbsbmeRg5PHi8pwA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hKoFoRzkEgzDwkdQLFJrF96Oh4CJyeZ6gkThknDOzamUha9XeyejAac6+3+Rk+7dt iG+r/9PF55R8xFzmlhDsDnv/YIF73O97DibDE3uvhjpo3zex68DOqVjPyCgxd8DcIO kG2bTEx101p3OcllCYNIEMBs4V/Xsy5cqUvostIcrp38XJuaVqhDmpH8wO9v2bVLRR F5LU6Tj8lze0RQXnFEQCBbYPD9FvScS8isasVLD7XIilEzE58kK+5cE2NaWmC9lCUS 00xcBjyzA6ALaVUlWKw2j09+PpQPuQSwp86widvVeVwRu2KWy+/jNK/XJI7FfQ8F1K hs+h3azFBlf9g== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 07/12] t/socket: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:47 +0700 Message-Id: <20220902011548.2506938-8-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/socket.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/socket.c b/test/socket.c index 6a3ea09..94c8e9f 100644 --- a/test/socket.c +++ b/test/socket.c @@ -2,63 +2,63 @@ /* * Simple test case using the socket op */ #include #include #include #include #include #include #include #include #include +#include #include "liburing.h" #include "helpers.h" static char str[] = "This is a test of send and recv over io_uring!"; #define MAX_MSG 128 -#define PORT 10202 #define HOST "127.0.0.1" static int no_socket; +static __be32 g_port; static int recv_prep(struct io_uring *ring, struct iovec *iov, int *sock, int registerfiles) { struct sockaddr_in saddr; struct io_uring_sqe *sqe; int sockfd, ret, val, use_fd; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htonl(INADDR_ANY); - saddr.sin_port = htons(PORT); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } val = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); - ret = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)); - if (ret < 0) { + if (t_bind_ephemeral_port(sockfd, &saddr)) { perror("bind"); goto err; } + g_port = saddr.sin_port; if (registerfiles) { ret = io_uring_register_files(ring, &sockfd, 1); if (ret) { fprintf(stderr, "file reg failed\n"); goto err; } use_fd = 0; } else { use_fd = sockfd; } @@ -235,27 +235,28 @@ static int do_send(int socket_direct, int alloc) fprintf(stderr, "queue init failed: %d\n", ret); return 1; } if (socket_direct) { ret = io_uring_register_files(&ring, &fd, 1); if (ret) { fprintf(stderr, "file register %d\n", ret); return 1; } } + assert(g_port != 0); memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; - saddr.sin_port = htons(PORT); + saddr.sin_port = g_port; inet_pton(AF_INET, HOST, &saddr.sin_addr); sqe = io_uring_get_sqe(&ring); if (socket_direct) { unsigned file_index = 0; if (alloc) file_index = IORING_FILE_INDEX_ALLOC - 1; io_uring_prep_socket_direct(sqe, AF_INET, SOCK_DGRAM, 0, file_index, 0); } else { io_uring_prep_socket(sqe, AF_INET, SOCK_DGRAM, 0, 0); } From patchwork Fri Sep 2 01:17:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963497 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27038ECAAD3 for ; Fri, 2 Sep 2022 01:18:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235259AbiIBBSt (ORCPT ); Thu, 1 Sep 2022 21:18:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235204AbiIBBSl (ORCPT ); Thu, 1 Sep 2022 21:18:41 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEF62A6C21 for ; Thu, 1 Sep 2022 18:18:31 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 4B70880927; Fri, 2 Sep 2022 01:18:27 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081510; bh=XQBr8PxJ0niB7G2n+280ojDnSSkFXiJIHzjXh7U4PII=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LQMUu2ERYSsCQLMdEFo042bGQMmxXYthZks/6UVw9Lc42VhcKrGiAMQ9fBdRjFEad choCBzLZWR7ZqBhMxqKxj0+M1yj9ZWNznKqzbYhKhi4rHEaNbygAa497iLjZJSUFdA s1jbyIudrOZgFcysJ8umUyfiybVrLud0UkxDwDxjrZEa6NTLLUpdKdtkLYms43AFIv ntMO7dLKzD8lboaaweixhDD5mpc95csF3/p6FfexR/1Bb7mSi43mMz9yfWsfBqAK/K tBlQdr23V/twhrS2xkcpxD0K5Bm0HAYTp0DzCyA87EVJmHV5rZ4dvC0SG4sdsZj6aH N0H53AZf1n+OQ== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 08/12] t/connect: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:48 +0700 Message-Id: <20220902011548.2506938-9-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/accept.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/accept.c b/test/accept.c index b35ded4..1821faa 100644 --- a/test/accept.c +++ b/test/accept.c @@ -185,29 +185,26 @@ static int start_accept_listen(struct sockaddr_in *addr, int port_off, int32_t val = 1; ret = setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); struct sockaddr_in laddr; if (!addr) addr = &laddr; addr->sin_family = AF_INET; - addr->sin_port = htons(0x1235 + port_off); addr->sin_addr.s_addr = inet_addr("127.0.0.1"); - - ret = bind(fd, (struct sockaddr*)addr, sizeof(*addr)); - assert(ret != -1); + assert(!t_bind_ephemeral_port(fd, addr)); ret = listen(fd, 128); assert(ret != -1); return fd; } static int set_client_fd(struct sockaddr_in *addr) { int32_t val; int fd, ret; fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); From patchwork Fri Sep 2 01:17:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963498 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EDE96ECAAD2 for ; Fri, 2 Sep 2022 01:18:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235293AbiIBBSv (ORCPT ); Thu, 1 Sep 2022 21:18:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235236AbiIBBSq (ORCPT ); Thu, 1 Sep 2022 21:18:46 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8AB39A6AE9 for ; Thu, 1 Sep 2022 18:18:35 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 1F5AC809E3; Fri, 2 Sep 2022 01:18:30 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081514; bh=t0FJhdPMM/bVFC7013MaDlZq+jm7QOzj7pap9eVHnmg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eVfJeYfRa0IV1879vF3OfxecAAwEyh+oJv5TZ1zKq54zkAHcIeTTNumTWRyhu+eGE PgmaWb43FWndGBny7R0pb128+ELk1RHaJxF7RS/GUf13yyK5lHTmB287nYoaEtdACs mp7SuCPU8P3AQfdnJs38NhzbEzaT0dKA5W36E+UyyJ7o+J+G/WuA3MumhdHyLM4bDR 9IefAcutJ9m5jcPHO9Jc9pA9eCQqtgQgsM9nUhppt3lVv20RaeWzDTeUEWQKGYG+n5 8wn0JE0awRtRti1W5HIo08VmIFIwt2mkmZwf/MHm4k3CZljcGlemSvHzybfQ9DSiOU kxhc45hGvDMww== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 09/12] t/shutdown: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:49 +0700 Message-Id: <20220902011548.2506938-10-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/shutdown.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/shutdown.c b/test/shutdown.c index 14c7407..064ee36 100644 --- a/test/shutdown.c +++ b/test/shutdown.c @@ -10,54 +10,53 @@ #include #include #include #include #include #include #include #include #include #include "liburing.h" +#include "helpers.h" static void sig_pipe(int sig) { } int main(int argc, char *argv[]) { int p_fd[2], ret; int32_t recv_s0; int32_t val = 1; - struct sockaddr_in addr; + struct sockaddr_in addr = { }; if (argc > 1) return 0; srand(getpid()); recv_s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(ret != -1); ret = setsockopt(recv_s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(ret != -1); addr.sin_family = AF_INET; - addr.sin_port = htons((rand() % 61440) + 4096); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - ret = bind(recv_s0, (struct sockaddr*)&addr, sizeof(addr)); - assert(ret != -1); + assert(!t_bind_ephemeral_port(recv_s0, &addr)); ret = listen(recv_s0, 128); assert(ret != -1); p_fd[1] = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); val = 1; ret = setsockopt(p_fd[1], IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); assert(ret != -1); int32_t flags = fcntl(p_fd[1], F_GETFL, 0); assert(flags != -1); From patchwork Fri Sep 2 01:17:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963499 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52173ECAAD3 for ; Fri, 2 Sep 2022 01:18:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234698AbiIBBSw (ORCPT ); Thu, 1 Sep 2022 21:18:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55826 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234653AbiIBBSr (ORCPT ); Thu, 1 Sep 2022 21:18:47 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BBE96A6C5A for ; Thu, 1 Sep 2022 18:18:38 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id CE87680927; Fri, 2 Sep 2022 01:18:34 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081518; bh=FTZsJHRV3bTx9ZGHHl2FYEIQgbCBQNbCFEtUUQKrhR8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ur0co2WK9mJVuS9XAlmsxn9khpvt9Z6W2OYpyUXIviWiHh12D3HjHWPyS999pL3sG e0vvFWQV9yXUqdZaxDMIOKcqEvfkAzt98G7aU8nkk9SRIWPG79JQyD4eyOh5Cey5WP pH8A2EtkNkcAtm8lPGvd0QNwu8pGLx13kI7cSoICKL5VHqyd98iK8b82xg6iOhPcI8 /qOCY61LNfNmZgsuL0Y9Ppy8U26B3hsYrvi6ujYcLGoGPqS3ao0lx9+6ctWyVElBbI MrzcaG19Pe1z7X3jH8cqXUMyX7Y5QsO4HAo3HwskpDRpm/QH4GVNNA19S4NtOovLbE 8XOyVQFxa8O4Q== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 10/12] t/recv-msgall: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:50 +0700 Message-Id: <20220902011548.2506938-11-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/recv-msgall.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/recv-msgall.c b/test/recv-msgall.c index a6f7cfc..ae123e4 100644 --- a/test/recv-msgall.c +++ b/test/recv-msgall.c @@ -7,55 +7,53 @@ #include #include #include #include #include #include #include #include "liburing.h" #include "helpers.h" #define MAX_MSG 128 - -#define PORT 10201 #define HOST "127.0.0.1" +static __be16 bind_port; static int recv_prep(struct io_uring *ring, struct iovec *iov, int *sock, int use_recvmsg) { struct sockaddr_in saddr; struct io_uring_sqe *sqe; int sockfd, ret, val; struct msghdr msg = { }; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htonl(INADDR_ANY); - saddr.sin_port = htons(PORT); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } val = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); - ret = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)); - if (ret < 0) { + if (t_bind_ephemeral_port(sockfd, &saddr)) { perror("bind"); goto err; } + bind_port = saddr.sin_port; sqe = io_uring_get_sqe(ring); if (!use_recvmsg) { io_uring_prep_recv(sqe, sockfd, iov->iov_base, iov->iov_len, MSG_WAITALL); } else { msg.msg_namelen = sizeof(struct sockaddr_in); msg.msg_iov = iov; msg.msg_iovlen = 1; io_uring_prep_recvmsg(sqe, sockfd, &msg, MSG_WAITALL); } @@ -156,25 +154,25 @@ static int do_send(void) ret = io_uring_queue_init(2, &ring, 0); if (ret) { fprintf(stderr, "queue init failed: %d\n", ret); return 1; } buf = malloc(MAX_MSG * sizeof(int)); for (i = 0; i < MAX_MSG; i++) buf[i] = i; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; - saddr.sin_port = htons(PORT); + saddr.sin_port = bind_port; inet_pton(AF_INET, HOST, &saddr.sin_addr); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } ret = connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)); if (ret < 0) { perror("connect"); return 1; From patchwork Fri Sep 2 01:17:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963500 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A879CECAAD2 for ; Fri, 2 Sep 2022 01:19:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234571AbiIBBTF (ORCPT ); Thu, 1 Sep 2022 21:19:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235278AbiIBBSv (ORCPT ); Thu, 1 Sep 2022 21:18:51 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEA4BA6ADE for ; Thu, 1 Sep 2022 18:18:42 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 9845180C38; Fri, 2 Sep 2022 01:18:38 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081521; bh=t/yUsttRItt9nJsTr0VDOU9oV2/pORcRDTd/UkdXK9A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kgdaJl8nJKsOHeAosLmWiJ0jW0j6Rp+rplNHPKonbTVmaIejhTVQzqlzlcYpnKWzq Azyx086+VxseuQx2gVQIyzZCt+ssc6TTQ57E1d5kQiG3/KTkRa9DN5mJ8fGYeKWujn KBbxTjIQpvVUjP6ApRN3hffmM5IStYNcRnnXjzAqhrK21Ne287LvyeVnmFo97QioBE +OhmYWG1iYYBryUFE0bxkgD1P3PCrubEFn/hjDz0Ay+H9Ep0ECFLB8fsPdabtowK41 /saiYsxEa3N+KRqnZWNrPwQO5LjZpG+UVujaJQNBYYiaacNaX69acILu+PSbjKgGpn +TxWg++PCTMNA== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 11/12] t/232c93d07b74: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:51 +0700 Message-Id: <20220902011548.2506938-12-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/232c93d07b74.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/232c93d07b74.c b/test/232c93d07b74.c index c99491f..74cc063 100644 --- a/test/232c93d07b74.c +++ b/test/232c93d07b74.c @@ -18,29 +18,28 @@ #include #include #include #include #include #include "helpers.h" #include "liburing.h" #define RECV_BUFF_SIZE 2 #define SEND_BUFF_SIZE 3 -#define PORT 0x1234 - struct params { int tcp; int non_blocking; + __be16 bind_port; }; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int rcv_ready = 0; static void set_rcv_ready(void) { pthread_mutex_lock(&mutex); rcv_ready = 1; pthread_cond_signal(&cond); @@ -68,28 +67,27 @@ static void *rcv(void *arg) int val = 1; s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); res = setsockopt(s0, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); assert(res != -1); res = setsockopt(s0, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); assert(res != -1); struct sockaddr_in addr; addr.sin_family = AF_INET; - addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); - res = bind(s0, (struct sockaddr *) &addr, sizeof(addr)); - assert(res != -1); + assert(t_bind_ephemeral_port(s0, &addr) == 0); + p->bind_port = addr.sin_port; } else { s0 = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); assert(s0 != -1); struct sockaddr_un addr; memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, "\0sock", 6); res = bind(s0, (struct sockaddr *) &addr, sizeof(addr)); assert(res != -1); } @@ -183,25 +181,25 @@ static void *snd(void *arg) wait_for_rcv_ready(); if (p->tcp) { int val = 1; s0 = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); ret = setsockopt(s0, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); assert(ret != -1); struct sockaddr_in addr; addr.sin_family = AF_INET; - addr.sin_port = htons(PORT); + addr.sin_port = p->bind_port; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); ret = connect(s0, (struct sockaddr*) &addr, sizeof(addr)); assert(ret != -1); } else { s0 = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); assert(s0 != -1); struct sockaddr_un addr; memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, "\0sock", 6); From patchwork Fri Sep 2 01:17:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ammar Faizi X-Patchwork-Id: 12963501 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98557ECAAD2 for ; Fri, 2 Sep 2022 01:19:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235290AbiIBBTI (ORCPT ); Thu, 1 Sep 2022 21:19:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235184AbiIBBSw (ORCPT ); Thu, 1 Sep 2022 21:18:52 -0400 Received: from gnuweeb.org (gnuweeb.org [51.81.211.47]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0FA4A6AD3 for ; Thu, 1 Sep 2022 18:18:46 -0700 (PDT) Received: from localhost.localdomain (unknown [182.2.38.99]) by gnuweeb.org (Postfix) with ESMTPSA id 5BF7580927; Fri, 2 Sep 2022 01:18:42 +0000 (UTC) X-GW-Data: lPqxHiMPbJw1wb7CM9QUryAGzr0yq5atzVDdxTR0iA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1662081525; bh=//7uly+1u1he/eHyd6032YyKChRFDV3/b/0CMS/ftak=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WHsueKAUiTia4VfQ5Lstrv07MXNskOaRy0OkNO2ZD+G59Mv8+iuHDKtA9kV43jhl0 453XEVPfcna09Z8yWAFbVDIA9mlc4jxS3TSyJohap3MCl5SNSng9c568UdfdGhABVF qEVCnRlEhc/sMFcULBvmd4pGqp/7ceOpM5a4IPca4gjRm7SCGShSYqtPA/pRig6PEq laYnwkhfFfOwr6nj3kgdjk9//e7t5ZIg0/FtWM78NLyMo0jtVghsFxFcHMs58/ZqCQ w8siPFBPDbSoq+Ni0TTKnAoyCk7ZLhP5qZTg8oaOZHIfei6uopmlwkTXpFqz9WcKdW mblySzOrc3GGA== From: Ammar Faizi To: Jens Axboe Cc: Ammar Faizi , Dylan Yudaken , Facebook Kernel Team , Pavel Begunkov , io-uring Mailing List , GNU/Weeb Mailing List , Kanna Scarlet , Muhammad Rizki Subject: [RESEND PATCH liburing v1 12/12] t/recv-msgall-stream: Don't use a static port number Date: Fri, 2 Sep 2022 08:17:52 +0700 Message-Id: <20220902011548.2506938-13-ammar.faizi@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220902011548.2506938-1-ammar.faizi@intel.com> References: <20220902011548.2506938-1-ammar.faizi@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Ammar Faizi Don't use a static port number. It might already be in use, resulting in a test failure. Use an ephemeral port to make this test reliable. Cc: Dylan Yudaken Cc: Facebook Kernel Team Cc: Pavel Begunkov Signed-off-by: Ammar Faizi --- test/recv-msgall-stream.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/test/recv-msgall-stream.c b/test/recv-msgall-stream.c index a188cc1..65b4d22 100644 --- a/test/recv-msgall-stream.c +++ b/test/recv-msgall-stream.c @@ -1,67 +1,65 @@ /* SPDX-License-Identifier: MIT */ /* * Test MSG_WAITALL for recv/recvmsg and include normal sync versions just * for comparison. */ +#include #include #include #include #include #include #include #include #include #include #include #include "liburing.h" #include "helpers.h" #define MAX_MSG 128 -static int port = 31200; - struct recv_data { pthread_mutex_t mutex; int use_recvmsg; int use_sync; - int port; + __be16 port; }; static int get_conn_sock(struct recv_data *rd, int *sockout) { struct sockaddr_in saddr; int sockfd, ret, val; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htonl(INADDR_ANY); - saddr.sin_port = htons(rd->port); sockfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); if (sockfd < 0) { perror("socket"); goto err; } val = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val)); - ret = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)); - if (ret < 0) { + if (t_bind_ephemeral_port(sockfd, &saddr)) { perror("bind"); goto err; } + rd->port = saddr.sin_port; ret = listen(sockfd, 16); if (ret < 0) { perror("listen"); goto err; } pthread_mutex_unlock(&rd->mutex); ret = accept(sockfd, NULL, NULL); if (ret < 0) { perror("accept"); @@ -270,36 +268,36 @@ static int do_send(struct recv_data *rd) int *buf; ret = io_uring_queue_init(2, &ring, 0); if (ret) { fprintf(stderr, "queue init failed: %d\n", ret); return 1; } buf = malloc(MAX_MSG * sizeof(int)); for (i = 0; i < MAX_MSG; i++) buf[i] = i; - memset(&saddr, 0, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(rd->port); - inet_pton(AF_INET, "127.0.0.1", &saddr.sin_addr); - sockfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); if (sockfd < 0) { perror("socket"); return 1; } pthread_mutex_lock(&rd->mutex); + assert(rd->port != 0); + memset(&saddr, 0, sizeof(saddr)); + saddr.sin_family = AF_INET; + saddr.sin_port = rd->port; + inet_pton(AF_INET, "127.0.0.1", &saddr.sin_addr); ret = connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)); if (ret < 0) { perror("connect"); return 1; } iov.iov_base = buf; iov.iov_len = MAX_MSG * sizeof(int) / 2; for (i = 0; i < 2; i++) { sqe = io_uring_get_sqe(&ring); io_uring_prep_send(sqe, sockfd, iov.iov_base, iov.iov_len, 0); @@ -342,25 +340,25 @@ static int test(int use_recvmsg, int use_sync) pthread_mutexattr_t attr; pthread_t recv_thread; struct recv_data rd; int ret; void *retval; pthread_mutexattr_init(&attr); pthread_mutexattr_setpshared(&attr, 1); pthread_mutex_init(&rd.mutex, &attr); pthread_mutex_lock(&rd.mutex); rd.use_recvmsg = use_recvmsg; rd.use_sync = use_sync; - rd.port = port++; + rd.port = 0; ret = pthread_create(&recv_thread, NULL, recv_fn, &rd); if (ret) { fprintf(stderr, "Thread create failed: %d\n", ret); pthread_mutex_unlock(&rd.mutex); return 1; } do_send(&rd); pthread_join(recv_thread, &retval); return (intptr_t)retval; }