我最近在玩go,尝试制作一些服务器来响应tcp连接上的客户端。
我的问题是我该如何干净地关闭服务器并中断在以下调用中当前“被阻止”的go例程
func(* TCPListener)接受吗?
根据接受文件
Accept在侦听器接口中实现Accept方法;它等待下一个调用并返回通用Conn。
错误也很少被记录下来。
这是我一直在寻找的东西。也许将来会帮助某人。注意使用select和“ c”通道将其与退出通道结合使用
ln, err := net.Listen("tcp", ":8080") if err != nil { // handle error } defer ln.Close() for { type accepted struct { conn net.Conn err error } c := make(chan accepted, 1) go func() { conn, err := ln.Accept() c <- accepted{conn, err} }() select { case a := <-c: if a.err != nil { // handle error continue } go handleConnection(a.conn) case e := <-ev: // handle event return } }