// 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() {
select {
case <-cn.closed.Done():
case <-writeCond:
- case <-time.After(time.Until(lastWrite.Add(keepAliveTimeout))):
+ case <-keepAliveTimer.C:
}
continue
}
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)