为了账号安全,请及时绑定邮箱和手机立即绑定

conn切换数据时,如果没有数据传输,会发生什么情况?

conn切换数据时,如果没有数据传输,会发生什么情况?

Go
FFIVE 2022-12-05 16:21:22
当我阅读开源代码时:下面有这段代码: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?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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

对于一个类似但更直接的示例,您会发现在同一文件中直接调用remoteConn.Read(data)了更高的位置。调用时,Read() 将不会返回,直到它获得一些数据 – 或者直到它达到使用 SetReadDeadline() 设置的超时(在这种情况下它将通过 返回超时错误err)。


查看完整回答
反对 回复 2022-12-05
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信