code: func (e *endpoint) keepaliveTimerExpired() *tcpip.Error {
  	e.keepalive.Lock()
  	if !e.keepalive.enabled || !e.keepalive.timer.checkExpiration() {
  		e.keepalive.Unlock()
  		return nil
  	}
  
  	if e.keepalive.unacked >= e.keepalive.count {
  		e.keepalive.Unlock()
  		return tcpip.ErrConnectionReset
  	}
  
  	// RFC1122 4.2.3.6: TCP keepalive is a dataless ACK with
  	// seg.seq = snd.nxt-1.
  	e.keepalive.unacked++
  	e.keepalive.Unlock()
  	e.snd.sendSegment(buffer.VectorisedView{}, header.TCPFlagAck, e.snd.sndNxt-1)
  	e.resetKeepaliveTimer(false)
  	return nil
  }
docs: // keepaliveTimerExpired is called when the keepaliveTimer fires. We send TCP
  // keepalive packets periodically when the connection is idle. If we don't hear
  // from the other side after a number of tries, we terminate the connection.