in server.go [280:317]
func (s *server) runTCPEventLoop(newSession NewSessionCallback) {
s.wg.Add(1)
go func() {
defer s.wg.Done()
var (
err error
client Session
delay time.Duration
)
for {
if s.IsClosed() {
log.Infof("server{%s} stop accepting client connect request.", s.addr)
return
}
if delay != 0 {
<-gxtime.After(delay)
}
client, err = s.accept(newSession)
if err != nil {
if netErr, ok := perrors.Cause(err).(net.Error); ok && netErr.Temporary() {
if delay == 0 {
delay = 5 * time.Millisecond
} else {
delay *= 2
}
if max := 1 * time.Second; delay > max {
delay = max
}
continue
}
log.Warnf("server{%s}.Accept() = err {%+v}", s.addr, perrors.WithStack(err))
continue
}
delay = 0
client.(*session).run()
}
}()
}