in gdbclient/internal/pool/conn.go [229:267]
func (cn *ConnWebSocket) readResponse() {
var errorTimes = 0
for {
if cn.brokenOrClosed() {
internal.Logger.Info("conn read routine exit", zapPtr(cn), zap.Time("time", time.Now()))
return
}
var msg []byte
var err error
var response *graphsonv3.Response
// read response as block, exit by io close signal
if err = cn.netConn.SetReadDeadline(cn.deadline(0)); err == nil {
if _, msg, err = cn.netConn.ReadMessage(); err == nil {
response, err = graphsonv3.ReadResponse(msg)
}
}
// handle response and tick future
if response != nil {
cn.handleResponse(response)
}
// check errors
if err != nil {
errorTimes++
if errorTimes > 10 {
cn._broken = true
cn.lastIoError = err
_ = cn.notifier != nil && cn.notifier()
internal.Logger.Error("conn read broken", zapPtr(cn), zap.Time("time", time.Now()), zap.Error(err))
return
}
} else {
errorTimes = 0
}
}
}