登录
首页 >  Golang >  Go问答

在conn数据切换时,若无数据传输,会引发何种状况?

来源:stackoverflow

时间:2024-02-26 17:21:24 275浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《在conn数据切换时,若无数据传输,会引发何种状况?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

当我阅读开源代码时:

下面有这段代码:

streamConn := func(dst io.Writer, src io.Reader) {
        io.Copy(dst, src)
        streamWait.Done()
    }
    go streamConn(remoteConn, conn)
    go streamConn(conn, remoteConn)

您看到使用两个 go streamconn() 在两个 conn 之间切换数据。 而且我想知道如果remoteconn没有数据要传输,那里复制什么?复制 nil


正确答案


通常网络套接字在阻塞模式下运行 - 如果没有更多数据要接收,那么“接收”操作将坐在那里等待,直到有一些数据为止。 。这就是为什么有两个 goroutine,每个方向一个——这样一个 goroutine 可以继续复制数据,而另一个仍在等待数据(在读取时阻塞)。

对于类似但更直接的示例,您会在同一文件的较高位置找到对 remoteConn.Read(data) 的直接调用。调用时,Read() 不会返回,直到它获取一些数据 - 或者直到它达到上面使用 SetReadDeadline() 设置的超时(在这种情况下,它将通过以下方式返回超时错误) err)。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在conn数据切换时,若无数据传输,会引发何种状况?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>