Go 什么';在Tcp连接侦听器中,延迟的用途是什么
我最近开始学习TCP,我了解延迟在文件创建和其他方面的工作原理,但我不了解在TCP中使用延迟的原因是当服务器侦听传入请求时,它就像一个无限循环,这样TCP永远不会停止侦听请求,除非它被命令行中断 以下面的代码为例:Go 什么';在Tcp连接侦听器中,延迟的用途是什么,go,Go,我最近开始学习TCP,我了解延迟在文件创建和其他方面的工作原理,但我不了解在TCP中使用延迟的原因是当服务器侦听传入请求时,它就像一个无限循环,这样TCP永远不会停止侦听请求,除非它被命令行中断 以下面的代码为例: package main import ( "fmt" "log" "net" ) func listenConnection(conn net.Conn) { for {
package main
import (
"fmt"
"log"
"net"
)
func listenConnection(conn net.Conn) {
for {
buffer := make([]byte, 1400)
size, err := conn.Read(buffer)
if err != nil {
fmt.Printf("Connection closed")
return
}
data := buffer[:size]
fmt.Printf("recieved message %s", data)
_, err = conn.Write(data)
if err != nil {
log.Fatalln(err)
}
}
}
func main() {
fmt.Println("Listening to localhost:5000")
listener, err := net.Listen("tcp", "localhost:5000")
if err != nil {
log.Fatalln(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Fatalln(err)
}
fmt.Println("New connection")
go listenConnection(conn )
}
}
延迟语句在这种情况下是如何工作的?它在任何上下文中都是一样的:它在包含函数完成后执行。在这种情况下,当
main()
终止时,延迟函数将运行
您的困惑似乎在于
main()
中有一个无限循环。实际上没有:当listener.Accept()
返回错误时,循环将终止,因为随后会调用log.Fatal
,从而终止整个程序。Wow。感谢@flimzyQuick提问:什么会触发listener.Accept()中的错误,不包括命令行中断@Flimzy回答这个问题的最好方法是阅读源代码:谢谢@Flimzy