From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 4A79A1FAF0 for ; Fri, 16 Dec 2022 22:56:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1671231419; bh=Flua4FPvsvVdNx1EEs9e94gn0aVD04qLS5PQcsg3Mnk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=opKutcLgd3JiV3JW7jlQ9lfUJc1Z5BDpaBPC5A8f0e6ODAyKBsESs8beEsQoEu4Ur BHoLLEN5l4MLhG1pXwec9HFV24biJb6bmvHi4NgebkxqNelw3CWPjaE/KztJbwIN/O ktjXOPFbszJQ4Jwlrg/auSQMm6pr24eVn+5HZqs4= From: Eric Wong To: mwrap-perl@80x24.org Subject: [PATCH 3/3] rproxy: more thorough connectivity check Date: Fri, 16 Dec 2022 22:57:54 +0000 Message-Id: <20221216225754.96103-4-mwrap-perl@80x24.org> In-Reply-To: <20221216225754.96103-1-mwrap-perl@80x24.org> References: <20221216225754.96103-1-mwrap-perl@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Sometimes, stale sockets can stick around and the PID gets recycled by a different process, so ensure we can actually connect to it before listing it. --- lib/Devel/Mwrap/Rproxy.pm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/Devel/Mwrap/Rproxy.pm b/lib/Devel/Mwrap/Rproxy.pm index 76b7d7f..6db72e6 100644 --- a/lib/Devel/Mwrap/Rproxy.pm +++ b/lib/Devel/Mwrap/Rproxy.pm @@ -41,11 +41,15 @@ sub list { open(my $fh, '+>', \(my $str)) or die "open: $!"; print $fh '', $t, '
', $t,
 		"\n\n";
-	opendir(my $dh, $self->{socket_dir}) or return r(500, "socket_dir: $!");
-	my @pids = grep(/\A[0-9]+\.sock\z/, readdir($dh));
-	for (@pids) {
+	my $dir = $self->{socket_dir};
+	opendir(my $dh, $dir) or return r(500, "socket_dir: $!");
+	my @socks = grep(/\A[0-9]+\.sock\z/, readdir($dh));
+	my %o = (Type => SOCK_STREAM, Peer => undef);
+	for (@socks) {
+		$o{Peer} = "$dir/$_";
 		substr($_, -5, 5, ''); # chop off .sock
 		my $cmd = $valid_pid->($_) // next;
+		my $c = IO::Socket::UNIX->new(%o) // next;
 		print $fh qq($_/);
 		$_ .= '/each/2000';
 		say $fh qq(each/2000\t), $cmd;