当接通开关数据时,如果没有数据要传输,将会发生什么?

  • 本文关键字:数据 开关 如果没有 传输 go
  • 更新时间 :
  • 英文 :


当我阅读开源代码时:

有如下代码:

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没有数据传输,那里复制什么?copynil?

通常网络套接字以阻塞模式运行-如果没有更多的数据要接收,则"接收";操作只会让坐在那里等待直到有一些。这就是为什么有两个例程,一个在一个方向上——这样一个可以继续复制数据,而另一个仍然在等待数据(读取时阻塞)。

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

最新更新