From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from atuin.qyliss.net (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id BC42D1F08E; Sat, 29 Nov 2025 17:27:43 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 993) id 1E0DC1EF7D; Sat, 29 Nov 2025 17:27:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on atuin.qyliss.net X-Spam-Level: * X-Spam-Status: No, score=1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DMARC_PASS,MISSING_HEADERS,SPF_HELO_NONE autolearn=no autolearn_force=no version=4.0.1 Received: from mail.cyberchaos.dev (mail.cyberchaos.dev [IPv6:2a0f:4ac0::3a11]) by atuin.qyliss.net (Postfix) with ESMTPS id 3F4061EF7C for ; Sat, 29 Nov 2025 17:27:40 +0000 (UTC) Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yuka.dev; s=mail; t=1764437253; h=from:from:reply-to:subject:subject:date:date:message-id:message-id:to: cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=vu0bgfRtuCwJz0+KNbXYhLW96qvM6aGP01UT/10xwO8=; b=ggxmlc61QdQ0WTZquN8/Kugmyld00kBdNaBjaWiY6JoqgRac7VcXr2N7fY91OmelzPkpAT ssLP2peqw7PFW3twuwADJlrHq+HG2gzaooijslWNgo0Z/RVYp0m+FMniSYc/zWdZPRldNw qwc/iLRAEyF3UNH0aHn8zmd10OhYfQA= Date: Sat, 29 Nov 2025 18:27:32 +0100 MIME-Version: 1.0 From: Yureka Subject: Re: [PATCH] release/checks/integration: handle partial sends References: <20251129163521.717709-2-hi@alyssa.is> Content-Language: en-US Cc: devel@spectrum-os.org Autocrypt: addr=yuka@yuka.dev; keydata= xjMEZ3vnnhYJKwYBBAHaRw8BAQdAn6RVMnaxLzmDDx+J3jSUGY7BqjyDhsWhdwKBSI6QpXfN Fll1cmVrYSA8eXVrYUB5dWthLmRldj7CjgQTFgoANhYhBPGINbLQ3ypM7JNhigKbtnC7kwpH BQJne+eeAhsDBAsJCAcEFQoJCAUWAgMBAAIeBQIXgAAKCRACm7Zwu5MKRx1qAP9ToLaOMd73 VVf1JdwoMc5G44OZfKNk/+ezt9Dl2oqZdQD/Xvgd0lytU3BZ4WnYeMNzo2xHeRxXmX+MfXhA D33tzQ/OOARne+eeEgorBgEEAZdVAQUBAQdAIs9uImfvgSCnJOcfvzshLuaSRJ/a0Vp/9rUA eBGZq10DAQgHwngEGBYKACAWIQTxiDWy0N8qTOyTYYoCm7Zwu5MKRwUCZ3vnngIbDAAKCRAC m7Zwu5MKRyW9AP0dBOuwgWso+QjBZUsbuEmGGUz2OWtszs2Yb7087RMerwEA3al6E7vqq0HC 7LiB3nisU+xqQojJ4n/fWCu70iEkjQw= In-Reply-To: <20251129163521.717709-2-hi@alyssa.is> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Message-ID-Hash: GDHVUTTDBDY25K27HFHAMRNRI5WE33CE X-Message-ID-Hash: GDHVUTTDBDY25K27HFHAMRNRI5WE33CE X-MailFrom: yuka@yuka.dev X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address X-Mailman-Version: 3.3.9 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Thanks for looking into this. On 11/29/25 17:35, Alyssa Ross wrote: > Sometimes we see a test failure that looks like this: > > unexpected connection data: qemu-system-aarch64: terminating on signal > 15 from pid 184 () > > I think this is because, now that the nc command in the networking > integration test has a timeout, it's possible for it to time out after > having opened the connection, but before having written all its input > to it. Therefore, ignore connections that send a prefix of the > expected data (including nothing), and just wait for the next > connection rather than failing if that happens. > > Closes: > https://spectrum-os.org/lists/archives/spectrum-devel/875xbl33vw.fsf@alyssa.is/ > Fixes: c61b297 ("release/checks/integration: add nc timeout") > Signed-off-by: Alyssa Ross > --- > Please test! It's difficult to know if I've solved the problem for > real, since it happens transiently. > > release/checks/integration/networking.c | 49 +++++++++++++++---------- > 1 file changed, 30 insertions(+), 19 deletions(-) > > diff --git a/release/checks/integration/networking.c > b/release/checks/integration/networking.c > index 97d7895..a445af1 100644 > --- a/release/checks/integration/networking.c > +++ b/release/checks/integration/networking.c > @@ -57,32 +57,43 @@ static int setup_server(void) > static void expect_connection(int listener) > { > - int conn_fd; > - FILE *conn; > + int conn, r; > char msg[7]; > size_t len; > - fputs("waiting for server connection\n", stderr); > - if ((conn_fd = accept(listener, nullptr, nullptr)) == -1) { > - perror("accept"); > - exit(EXIT_FAILURE); > - } > - fputs("accepted connection!\n", stderr); > - if (!(conn = fdopen(conn_fd, "r"))) { > - perror("fdopen(server connection)"); > - exit(EXIT_FAILURE); > - } > + for (;;) { > + len = 0; > - len = fread(msg, 1, sizeof msg, conn); > - if (len != 6 || memcmp("hello\n", msg, 6)) { > - if (ferror(conn)) > - perror("fread(server connection)"); > - else > + fputs("waiting for server connection\n", stderr); > + if ((conn = accept(listener, nullptr, nullptr)) == -1) { > + perror("accept"); > + exit(EXIT_FAILURE); > + } > + fputs("accepted connection!\n", stderr); > + > + for (;;) { > + r = read(conn, msg + len, sizeof msg - len); > + if (r == -1) { > + perror("read"); > + exit(EXIT_FAILURE); > + } > + if (r == 0) > + break; > + len += r; > + } > + > + if (memcmp("hello\n", msg, len) || len > 6) { > fprintf(stderr, "unexpected connection data: %.*s", > (int)len, msg); > - exit(EXIT_FAILURE); > + exit(EXIT_FAILURE); > + } > + > + // If connection was disconnect partway through, try again. > + if (len < 6) > + continue; > + > + return; > } > - fclose(conn); Is it intentional that the connection is never closed? > } > static void drain_connections(int listener) > > base-commit: 067c6a5d50971242f9cb8ac0ac76e20d88a9b5c1