golang的net.Conn.Read如何停止读取?

我正在尝试编写一个基于套接字的简单go服务器。我只是想知道如何连接。下面的内容知道什么时候停止阅读。(注意:这不是我的代码,例如,我从Go中的Unix套接字复制了它)


package main


import (

  "log"

  "net"

)


func echoServer(c net.Conn) {

  for {

    buf := make([]byte, 512)

    nr, err := c.Read(buf)

    if err != nil {

        return

    }


    data := buf[0:nr]

    println("Server got:", string(data))

    _, err = c.Write(data)

    if err != nil {

        log.Fatal("Write: ", err)

    }

  }

}


func main() {

  l, err := net.Listen("unix", "/tmp/echo.sock")

  if err != nil {

    log.Fatal("listen error:", err)

  }


  for {

    fd, err := l.Accept()

    if err != nil {

        log.Fatal("accept error:", err)

    }


    go echoServer(fd)

  }

 }

是EOF角色还是其他?如果有人可以指向我指向官方go docs链接,这将非常有帮助。谢谢。


哈士奇WWW
浏览 744回答 2
2回答

慕的地6264312

当其基础实现遇到任何错误时,它将停止读取。错误可能是实际的I / O错误,或者可能是操作系统信号连接被io.EOF关闭,或者可能是超时,依此类推。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go