我有一个功能如下:
func keepConnUp(n netAddr, w chan<- io.Writer, err chan error) {
addr := fmt.Sprintf("%s:%d", n.Addr, n.Port)
for {
<-err
time.Sleep(reconnectTimer)
conn, _ := net.Dial(n.Network, addr)
w <- conn
}
}
目标是当我收到来自err chan. 但是,如果我已经在拨号或在某个时间段内,我不想重拨。但是,我可能会收到很多我不想阻止的错误。
我怎么能那样做?
编辑
到目前为止我已经实施的解决方案:
func keepConnUp(n netAddr, w chan<- io.Writer, err chan error) {
addr := fmt.Sprintf("%s:%d", n.Addr, n.Port)
done := make(chan bool)
isDialing := false
for {
select {
case <-err:
if !isDialing {
isDialing = true
time.AfterFunc(reconnectTimer, func() {
done <- true
})
}
case <-done:
conn, _ := net.Dial(n.Network, addr)
w <- conn
isDialing = false
}
}
}
蝴蝶刀刀
吃鸡游戏
慕桂英546537
相关分类