Merge pull request #2454 from cfromknecht/handle-write-errors

peer: handle message encoding errors on write
This commit is contained in:
Johan T. Halseth 2019-01-11 09:36:21 +01:00 committed by GitHub
commit 058b0e5767
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

20
peer.go

@ -1367,13 +1367,25 @@ func (p *peer) writeMessage(msg lnwire.Message) error {
// With the temp buffer created and sliced properly (length zero, full
// capacity), we'll now encode the message directly into this buffer.
n, err := lnwire.WriteMessage(b, msg, 0)
atomic.AddUint64(&p.bytesSent, uint64(n))
_, err := lnwire.WriteMessage(b, msg, 0)
if err != nil {
return err
}
p.conn.SetWriteDeadline(time.Now().Add(writeMessageTimeout))
// Compute and set the write deadline we will impose on the remote peer.
writeDeadline := time.Now().Add(writeMessageTimeout)
err = p.conn.SetWriteDeadline(writeDeadline)
if err != nil {
return err
}
// Finally, write the message itself in a single swoop.
_, err = p.conn.Write(b.Bytes())
n, err := p.conn.Write(b.Bytes())
// Regardless of the error returned, record how many bytes were written
// to the wire.
atomic.AddUint64(&p.bytesSent, uint64(n))
return err
}