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

标签 c# .net sockets tcp tcpclient

TcpClient.NoDelay文档状态:

Gets or sets a value that disables a delay when send or receive buffers are not full.


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

最佳答案

When there's data in the buffer and NoDelay is then set to true, will the data in the buffer be sent immediately?



它在下一个 Send 上被评估有有效数据。
您可以通过 NoDelay = true 验证其次是 Send有几个字节。
或设置NoDelay = true无需调用 Send之后,您应该不会看到任何变化。
我使用 Wireshark 进行了验证,但可以使用您喜欢的任何数据包检查工具。
TcpClient只是 Socket 周围的薄包装,所以你可以使用 Socket.NoDelay 以同样的方式。
套接字选项由此设置 method调用 setsockopt这是 native code :
errorCode = UnsafeNclNativeMethods.OSSOCK.setsockopt(
    m_Handle,
    optionLevel,
    optionName,
    ref optionValue,
    sizeof(int));
在这种情况下设置的实际选项是 TCP_NODELAY .

关于c# - TcpClient.NoDelay 会影响已经写入的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65812433/

相关文章:

c# - 如何将泛型类型列表作为参数传递给 xamarin-C#-ios 中 TableSource 的构造函数?

c# - 给定一个颜色对象列表,找到出现频率最高/最少的颜色,并将其作为颜色对象返回

c# - 使用 LINQ 根据字段过滤 JSON 对象

java - 无法使用 Netty 将字节 [] 发送到服务器

c++ - 确定谁打开了 TCP session

c# - 如何将数组转换为查找数据结构

java - 为什么 compareTo 返回一个整数

.net - VS 2008 中的重构工具?

c# - 如何对 "console.readLine"进行单元测试以获取无效输入?

javascript - Nodejs MySQL 循环中的多个查询