From: Eric Wong Date: Mon, 24 Jun 2019 02:52:37 +0000 (+0000) Subject: nntp: wait for writability before sending greeting X-Git-Tag: v1.2.0~156^2~23 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=93fc0336d39ba3ef07b479877e64371f07c86eab nntp: wait for writability before sending greeting This will be needed for NNTPS support, since we need to negotiate the TLS connection before writing the greeting and we can reuse the existing buffer layer to enqueue writes. --- diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 468a22f5..a18641d3 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -24,7 +24,7 @@ use constant { r225 => '225 Headers follow (multi-line)', r430 => '430 No article with that message-id', }; -use PublicInbox::Syscall qw(EPOLLIN EPOLLONESHOT); +use PublicInbox::Syscall qw(EPOLLOUT EPOLLONESHOT); use Errno qw(EAGAIN); my @OVERVIEW = qw(Subject From Date Message-ID References Xref); @@ -98,9 +98,11 @@ sub expire_old () { sub new ($$$) { my ($class, $sock, $nntpd) = @_; my $self = fields::new($class); - $self->SUPER::new($sock, EPOLLIN | EPOLLONESHOT); + $self->SUPER::new($sock, EPOLLOUT | EPOLLONESHOT); $self->{nntpd} = $nntpd; - res($self, '201 ' . $nntpd->{servername} . ' ready - post via email'); + my $greet = "201 $nntpd->{servername} ready - post via email\r\n"; + open my $fh, '<:scalar', \$greet or die "open :scalar: $!"; + $self->{wbuf} = [ $fh ]; $self->{rbuf} = ''; update_idle_time($self); $expt ||= PublicInbox::EvCleanup::later(*expire_old);