peer-conn-msg-writer.go | 4 +++- diff --git a/peer-conn-msg-writer.go b/peer-conn-msg-writer.go index 4dbf00e407d70df7c5b6944bb6010481ed288d47..3948eb64263f9bebcdbd6e36578e78d7e8ac9d91 100644 --- a/peer-conn-msg-writer.go +++ b/peer-conn-msg-writer.go @@ -60,6 +60,7 @@ // activity elsewhere in the Client, and some is determined locally when the // connection is writable. func (cn *peerConnMsgWriter) run(keepAliveTimeout time.Duration) { lastWrite := time.Now() + keepAliveTimer := time.NewTimer(keepAliveTimeout) frontBuf := new(bytes.Buffer) for { if cn.closed.IsSet() { @@ -78,7 +79,7 @@ cn.mu.Unlock() select { case <-cn.closed.Done(): case <-writeCond: - case <-time.After(time.Until(lastWrite.Add(keepAliveTimeout))): + case <-keepAliveTimer.C: } continue } @@ -88,6 +89,7 @@ cn.mu.Unlock() n, err := cn.w.Write(frontBuf.Bytes()) if n != 0 { lastWrite = time.Now() + keepAliveTimer.Reset(keepAliveTimeout) } if err != nil { cn.logger.WithDefaultLevel(log.Debug).Printf("error writing: %v", err)