TcpClient.NoDelay 会影响已经写入的数据吗?

isp*_*iro 6 .net c# sockets tcp tcpclient

TcpClient.NoDelay文档状态:

获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。

但是,目前尚不清楚这是否仅适用于设置为之后写入的true数据,或者也适用于已写入且正在等待的数据。即当缓冲区中有数据然后设置为 时,缓冲区中的数据NoDelay是否会立即发送?true

Zer*_*er0 3

当缓冲区中有数据,然后将NoDelay设置为true时,缓冲区中的数据会立即发送吗?

不。

接下来将Send使用有效数据对其进行评估。

您可以NoDelay = true通过后面的Send几个字节进行验证。

或者NoDelay = true在不调用Sendafter 的情况下进行设置,您应该不会看到任何变化。

我使用Wireshark进行验证,但可以使用您喜欢的任何数据包检查工具。


TcpClient只是一层薄薄的包装纸Socket,所以你可以用Socket.NoDelay同样的方法。

套接字选项是通过调用此方法setsockopt设置的,该方法是本机代码

errorCode = UnsafeNclNativeMethods.OSSOCK.setsockopt(
    m_Handle,
    optionLevel,
    optionName,
    ref optionValue,
    sizeof(int));
Run Code Online (Sandbox Code Playgroud)

在这种情况下设置的实际选项是TCP_NODELAY