func()

in gdbclient/internal/pool/conn.go [166:198]


func (cn *ConnWebSocket) connCheck(frequency time.Duration) {
	ticker := time.NewTicker(frequency)
	defer ticker.Stop()

	for {
		select {
		case <-ticker.C:
			// It is possible that ticker and closedCn arrive together,
			// and select pseudo-randomly pick ticker case, we double
			// check here to prevent being executed after closed.
			if cn.closed() {
				return
			}
			err := cn.doping(3)
			if err != nil {
				cn.pingErrorsNum += 1
				internal.Logger.Error("status check", zapPtr(cn), zap.Time("time", time.Now()), zap.Error(err))
				if cn.pingErrorsNum >= 3 {
					cn._broken = true
					cn.lastIoError = err
					// wakeup pool to check connection status
					_ = cn.notifier != nil && cn.notifier()
					internal.Logger.Error("conn ping broken", zapPtr(cn), zap.Time("time", time.Now()))
					return
				}
			} else {
				cn.pingErrorsNum = 0
			}
		case <-cn.closeCn:
			return
		}
	}
}