in conn.go [878:907]
func (c *Conn) writeFrame(timeout time.Duration, fr frames.Frame) error {
// writeFrame into txBuf
c.txBuf.Reset()
err := frames.Write(&c.txBuf, fr)
if err != nil {
return &ConnError{inner: err}
}
// validate the frame isn't exceeding peer's max frame size
requiredFrameSize := c.txBuf.Len()
if uint64(requiredFrameSize) > uint64(c.peerMaxFrameSize) {
return &ConnError{inner: fmt.Errorf("%T frame size %d larger than peer's max frame size %d", fr, requiredFrameSize, c.peerMaxFrameSize)}
}
if timeout == 0 {
_ = c.net.SetWriteDeadline(time.Time{})
} else if timeout > 0 {
_ = c.net.SetWriteDeadline(time.Now().Add(timeout))
}
// write to network
n, err := c.net.Write(c.txBuf.Bytes())
if l := c.txBuf.Len(); n > 0 && n < l && err != nil {
debug.Log(1, "TX (writeFrame %p): wrote %d bytes less than len %d: %v", c, n, l, err)
}
if err != nil {
err = &ConnError{inner: err}
}
return err
}