Index: blimp/net/stream_packet_reader.cc |
diff --git a/blimp/net/stream_packet_reader.cc b/blimp/net/stream_packet_reader.cc |
index dd91cae085b6e080841ba13d6d2b6d1a562bcd60..00e0c3ec137856d2ed24c309d8ed40f703592198 100644 |
--- a/blimp/net/stream_packet_reader.cc |
+++ b/blimp/net/stream_packet_reader.cc |
@@ -103,10 +103,11 @@ int StreamPacketReader::DoReadHeader(int result) { |
header_buffer_->set_offset(header_buffer_->offset() + result); |
if (static_cast<size_t>(header_buffer_->offset()) < kPacketHeaderSizeBytes) { |
// There is more header to read. |
- return socket_->Read(header_buffer_.get(), |
- kPacketHeaderSizeBytes - header_buffer_->offset(), |
- base::Bind(&StreamPacketReader::OnReadComplete, |
- weak_factory_.GetWeakPtr())); |
+ int result = socket_->Read( |
+ header_buffer_.get(), kPacketHeaderSizeBytes - header_buffer_->offset(), |
+ base::Bind(&StreamPacketReader::OnReadComplete, |
+ weak_factory_.GetWeakPtr())); |
+ return (result != 0 ? result : net::ERR_CONNECTION_CLOSED); |
} |
// Finished reading the header. Parse the size and prepare for payload read. |
@@ -141,6 +142,12 @@ int StreamPacketReader::DoReadPayload(int result) { |
void StreamPacketReader::OnReadComplete(int result) { |
DCHECK_NE(net::ERR_IO_PENDING, result); |
+ if (result == 0 /* EOF */) { |
+ payload_buffer_ = nullptr; |
+ base::ResetAndReturn(&callback_).Run(net::ERR_CONNECTION_CLOSED); |
+ return; |
+ } |
+ |
// If the read was succesful, then process the result. |
if (result > 0) { |
result = DoReadLoop(result); |