diff options
Diffstat (limited to 'lib/PublicInbox/LeiSelfSocket.pm')
-rw-r--r-- | lib/PublicInbox/LeiSelfSocket.pm | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/lib/PublicInbox/LeiSelfSocket.pm b/lib/PublicInbox/LeiSelfSocket.pm index 3d847649..0e15bc7c 100644 --- a/lib/PublicInbox/LeiSelfSocket.pm +++ b/lib/PublicInbox/LeiSelfSocket.pm @@ -5,41 +5,33 @@ # This receives what script/lei receives, but isn't connected # to an interactive terminal so I'm not sure what to do with it... package PublicInbox::LeiSelfSocket; -use strict; -use v5.10.1; +use v5.12; use parent qw(PublicInbox::DS); use Data::Dumper; $Data::Dumper::Useqq = 1; # should've been the Perl default :P -use PublicInbox::Syscall qw(EPOLLIN EPOLLET); -use PublicInbox::Spawn; -my $recv_cmd; +use PublicInbox::Syscall qw(EPOLLIN); +use PublicInbox::IPC; sub new { my ($cls, $r) = @_; - my $self = bless { sock => $r }, $cls; + my $self = bless {}, $cls; $r->blocking(0); - no warnings 'once'; - $recv_cmd = $PublicInbox::LEI::recv_cmd; - $self->SUPER::new($r, EPOLLIN|EPOLLET); + $self->SUPER::new($r, EPOLLIN); } sub event_step { my ($self) = @_; - while (1) { - my (@fds) = $recv_cmd->($self->{sock}, my $buf, 4096 * 33); - if (scalar(@fds) == 1 && !defined($fds[0])) { - return if $!{EAGAIN}; - next if $!{EINTR}; - die "recvmsg: $!"; - } - # open so perl can auto-close them: - for my $fd (@fds) { - open(my $newfh, '+<&=', $fd) or die "open +<&=$fd: $!"; - } - return $self->close if $buf eq ''; - warn Dumper({ 'unexpected self msg' => $buf, fds => \@fds }); - # TODO: figure out what to do with these messages... + my ($buf, @fds); + @fds = $PublicInbox::IPC::recv_cmd->($self->{sock}, $buf, 4096 * 33); + if (scalar(@fds) == 1 && !defined($fds[0])) { + return if $!{EAGAIN}; + die "recvmsg: $!" unless $!{ECONNRESET}; + } else { # just in case open so perl can auto-close them: + for (@fds) { open my $fh, '+<&=', $_ }; } + return $self->close if $buf eq ''; + warn Dumper({ 'unexpected self msg' => $buf, fds => \@fds }); + # TODO: figure out what to do with these messages... } 1; |