From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id D11CE20578 for ; Fri, 11 Mar 2016 22:05:55 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] daemon: fixup usage of the '-l' switch with IP/INET6 sockets Date: Fri, 11 Mar 2016 22:05:55 +0000 Message-Id: <20160311220555.4933-1-e@80x24.org> List-Id: We need to ensure $sock_pkg is preserved outside of the loop. The variable passed to "for" or "foreach" is implicitly local and restores the previous value when the loop exits. This is documented in the perlsyn manpage in the "Foreach Loops" section. Fixes: ea1b6cbd422b ("daemon: allow using IO::Socket::IP over INET6") --- lib/PublicInbox/Daemon.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index fcb1a3d..c6fb62b 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -69,7 +69,8 @@ sub daemon_prepare ($) { $o{Local} = delete $o{Peer}; } else { # both work for IPv4, too - for $sock_pkg (qw(IO::Socket::IP IO::Socket::INET6)) { + for (qw(IO::Socket::IP IO::Socket::INET6)) { + $sock_pkg = $_; eval "use $sock_pkg"; $@ or last; } @@ -79,7 +80,7 @@ sub daemon_prepare ($) { $o{Listen} = 1024; my $prev = umask 0000; my $s = eval { $sock_pkg->new(%o) }; - warn "error binding $l: $!\n" unless $s; + warn "error binding $l: $! ($@)\n" unless $s; umask $prev; if ($s) { -- EW