- my ($out_r, $out_w);
- pipe($out_r, $out_w) or die "pipe failed: $!";
- my $rdr = { 0 => $out_r, 2 => $self->{2} };
- my $cmd = [$^X, qw[-MPublicInbox::Gcf2 -e PublicInbox::Gcf2::loop()]];
- @$self{qw(in pid)} = popen_rd($cmd, $env, $rdr);
- fcntl($out_w, 1031, 4096) if $^O eq 'linux'; # 1031: F_SETPIPE_SZ
- $out_w->autoflush(1);
- $out_w->blocking(0);
- $self->SUPER::new($out_w, 0); # EPOLL_CTL_ADD (a bit wasteful :x)
+ my ($s1, $s2);
+ socketpair($s1, $s2, AF_UNIX, SOCK_STREAM, 0) or die "socketpair $!";
+ $rdr //= {};
+ $rdr->{0} = $rdr->{1} = $s2;
+ my $cmd = [$^X, qw[-MPublicInbox::Gcf2 -e PublicInbox::Gcf2::loop]];
+ $self->{'pid.owner'} = $$;
+ $self->{pid} = spawn($cmd, $env, $rdr);
+ $s1->blocking(0);