user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
* [RFC] nntp: do not drain rbuf if there is a command pending
@ 2018-03-07 19:08 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2018-03-07 19:08 UTC (permalink / raw)
  To: meta

Some clients pipeline requests aggressively (enough to match
LINE_MAX) and we should not read from the client socket until we
know there's no pending command in our read buffer.
---
 lib/PublicInbox/NNTP.pm | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 1e56463..267fe4b 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -949,10 +949,12 @@ sub event_write {
 sub event_read {
 	my ($self) = @_;
 	use constant LINE_MAX => 512; # RFC 977 section 2.3
-	my $r = 1;
 
-	my $buf = $self->read(LINE_MAX) or return $self->close;
-	$self->{rbuf} .= $$buf;
+	if (index($self->{rbuf}, "\n") < 0) {
+		my $buf = $self->read(LINE_MAX) or return $self->close;
+		$self->{rbuf} .= $$buf;
+	}
+	my $r = 1;
 	while ($r > 0 && $self->{rbuf} =~ s/\A\s*([^\r\n]+)\r?\n//) {
 		my $line = $1;
 		return $self->close if $line =~ /[[:cntrl:]]/s;
-- 
EW


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-03-07 19:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-07 19:08 [RFC] nntp: do not drain rbuf if there is a command pending Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).