gpt4 book ai didi

go - Tcp连接监听器中延迟的目的是什么

转载 作者:行者123 更新时间:2023-12-01 22:33:49 25 4
gpt4 key购买 nike

我最近开始学习TCP,我了解了defer在文件创建和其他方面的工作原理,但是我对TCP中defer的使用不了解的是,当服务器侦听传入的请求时,就像无限循环,这样TCP永远不会停止侦听请求,除非它被命令行中断。
以下面的代码为例:

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 )
}
}
在这种情况下,defer语句如何工作?

最佳答案

它在任何上下文中的工作原理都相同:在包含函数完成时执行。在这种情况下,当main()终止时,将运行deferred函数。
您的困惑似乎是关于main()中存在无限循环的想法。实际上没有一个:循环将在listener.Accept()返回错误时终止,因为然后将调用log.Fatal,从而终止整个程序。

关于go - Tcp连接监听器中延迟的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62816171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com