【发布时间】:2016-04-29 15:20:31
【问题描述】:
所以我有这个用于发送消息的代码块。传递给 c.outChan 的消息被传输,如果收到一个 ack 作为回报,“true”将通过 c.buffer[nr].signaler 通道传递。这似乎工作正常,但如果消息被丢弃(没有收到确认),而不是达到超时打印,它只是停止,我不知道为什么。代码如下:
func (c *uConnection) send(nr uint32) {
//transmitt message
c.outChan <- c.buffer[nr].msg
timeout := make(chan bool, 1)
go func() {
timeoutTimer := time.After(c.retransTime)
<-timeoutTimer
timeout <- true
}()
switch {
case <-c.buffer[nr].signaler:
fmt.Printf("Ack confirmed: %v\n", nr)
case <-timeout:
fmt.Println("-----------timeout-----------\n")
//resending
c.send(nr)
}
}
我做错了什么?
【问题讨论】:
标签: go network-programming udp timeout