【发布时间】:2019-03-01 12:39:54
【问题描述】:
我的服务器场景是这样的:一个 io 线程一直在 tcp 连接上进行读取。一段时间后,控制线程可能会由于活动量低或其他原因决定关闭它。如果调用c.Close(),io线程会报如下错误:read tcp xxx->xxx: use of closed network connection。
代码是这样的:
func recv(c net.Conn) {
input := bufio.NewScanner(c)
for input.Scan() {
msg <- input.Text()
...
}
}
//main
conn, err := s.Accept()
...
go recv(conn)
for {
select {
case m := <-msg:
...
case <-timeout:
conn.Close() // oops!
}
}
也许我可以忽略这个错误,但我想知道是否有更好的方法。
【问题讨论】:
标签: go