这个无限循环如何在 TCP 连接中工作?

How this infinite for loop works in TCP connection?

这个无限循环怎么不崩溃?

我想如果现在没有客户端,listener.Accept() 方法会抛出一个错误,使 if 条件为真并且 for 循环继续进行另一次迭代,直到客户端连接到服务器。因此,我将 fmt.Println("Error") 放在 if 语句中,看看它是否像我猜的那样工作。但事实并非如此。它没有打印“错误”,因此程序在没有客户端时不会进入 if 语句。

谁能解释一下这个 for 循环的实际工作原理?

func main() {
    
        service := ":1202"
        tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
        checkError(err)
    
        listener, err := net.ListenTCP("tcp4", tcpAddr)
        checkError(err)
    
        for {
            conn, err := listener.Accept()
            if err != nil {
                fmt.Println("Error")
                continue
            }
            
            
        }
    } 

这个无限循环执行以下操作:

  1. 等待 listener.Accept() 到 return 新连接或错误。

  2. 如果得到 return 值,请检查错误。如果你有一个,记录它,或者用它做任何事情,然后 continue 循环,所以服务器可以等待另一个新连接。

  3. 如果没有错误,只需启动一个单独的 go 例程来处理连接。这样 for 循环会立即再次运行,因此当您在单独的例程中处理连接时,侦听器将等待新连接。

看例子:

func main() {

    service := ":1202"
    tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
    checkError(err)

    listener, err := net.ListenTCP("tcp4", tcpAddr)
    checkError(err)

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Println("We've got an error:",err)
            continue
        }
        go HandleConnection(conn)
    }
}