From: Eric Wong <e@80x24.org>
To: mwrap-perl@80x24.org
Cc: Eric Wong <normalperson@yhbt.net>
Subject: [PATCH 2/4] t/mwrap-httpd: better errors for local socket failures
Date: Sat, 10 Dec 2022 10:01:42 +0000 [thread overview]
Message-ID: <20221210100144.19796-3-e@80x24.org> (raw)
In-Reply-To: <20221210100144.19796-1-e@80x24.org>
From: Eric Wong <normalperson@yhbt.net>
The syswrite() needs to be replaced by send(.*MSG_NOSIGNAL),
but I'm ignoring SIGPIPE anyways in case connect() somehow
triggers it. In any case, I'm noticing the local socket
created in Perl (not curl) sometimes fails the first send/write
and/or fails the second send/write syscall. Maybe this can
help diagnose things...
---
t/mwrap-httpd.t | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/t/mwrap-httpd.t b/t/mwrap-httpd.t
index a1bf333..b7076de 100644
--- a/t/mwrap-httpd.t
+++ b/t/mwrap-httpd.t
@@ -37,16 +37,16 @@ my $cleanup = sub {
END { $cleanup->() }
my $sock = "$mwrap_tmp/$pid.sock";
-my $n = 10000;
-my $c;
my %o = (Peer => $sock , Type => SOCK_STREAM);
-while (!$c && --$n > 0) {
- $c = IO::Socket::UNIX->new(%o) or
- select undef, undef, undef, 0.011;
+local $SIG{PIPE} = 'IGNORE';
+my $c;
+for (1..10000) {
+ last if -S $sock && ($c = IO::Socket::UNIX->new(%o));
+ select undef, undef, undef, 0.011;
}
ok(-S $sock, 'socket created');
ok($c, 'socket connected');
-is(syswrite($c, 'GET'), 3, 'trickled 3 bytes');
+is(send($c, 'GET', MSG_NOSIGNAL), 3, 'trickled 3 bytes') or diag "send: $!";
my $cout = "$mwrap_tmp/cout";
my $rc = system(qw(curl -vsSf --unix-socket), $sock, '-o', $cout,
@@ -67,12 +67,11 @@ SKIP: {
is($rc, 0, 'curl /reset');
};
-local $SIG{PIPE} = 'IGNORE';
{
my $req = " /$pid/each/20000 HTTP/1.0\r\n\r\n";
- is(syswrite($c, $req), length($req), 'wrote rest of response') or
- diag "syswrite: $!";
- my $x = do { local $/; <$c> } or diag "read: $!";
+ is(send($c, $req, MSG_NOSIGNAL), length($req),
+ 'wrote rest of response') or diag "send: $!";
+ my $x = do { local $/; <$c> } or diag "readline: $!";
like($x, qr!</html>\n?\z!s, 'got complete HTML response');
}
next prev parent reply other threads:[~2022-12-10 10:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-10 10:01 [PATCH 0/4] httpd fixes Eric Wong
2022-12-10 10:01 ` [PATCH 1/4] t/httpd-unit: extra test for fencepost errors Eric Wong
2022-12-10 20:45 ` Eric Wong
2022-12-10 10:01 ` Eric Wong [this message]
2022-12-10 10:01 ` [PATCH 3/4] rproxy: fix for `plackup --path=/$PREFIX/' mounts Eric Wong
2022-12-10 10:01 ` [PATCH 4/4] httpd: fix leaks when using persistent connections Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221210100144.19796-3-e@80x24.org \
--to=e@80x24.org \
--cc=mwrap-perl@80x24.org \
--cc=normalperson@yhbt.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mwrap-perl.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).