c# - C#设置接收超时(最佳/充足时间)
问题描述
我想知道接收/发送超时的最佳时间是什么时候
tcpSocket.ExclusiveAddressUse = true;
tcpSocket.LingerState = new LingerOption (true, 10);
tcpSocket.NoDelay = true;
tcpSocket.ReceiveTimeout = 5000;
tcpSocket.SendTimeout = 5000;
tcpSocket.Ttl = 42;
Console.WriteLine("Tcp Socket configured:");
我正在使用 5 秒,但我觉得它很高.. 在 .net 示例中,他们设置为 1 秒,所以
解决方案
根据 msdn,超时定义如下:
Receive Timeout :Gets or sets the interval of time that a connection can remain inactive, during which no application messages are received, before it is dropped.
Send Timeout : Gets or sets the interval of time provided for a write operation to complete before the transport raises an exception.
我会将接收超时保留为默认值(无限),因此当您有空闲通道时,连接不会关闭。除非您运行保持活动状态,它会定期发送零字节的消息。
发送超时您必须小心将值设置得太低。TCP 是可靠的,这意味着每个数据报都会得到一个确认。当一个 ack 没有被发送时,另一个数据报被正常发送最多 3 次重试。
当通道缓慢重试开始发生时 TCP 会发生什么,这会发送额外的重复数据报,然后会进一步减慢通道速度,直到重试次数过多以至于没有数据通过。
此外,当连接的接收端运行缓慢时,可能不会立即发回确认信息。所以你必须允许接收结束时间来发出确认。通常 ack 是由网卡自动完成的,应该不是问题。
此外,您还必须考虑是否有病毒检查程序或防火墙正在拦截消息。
推荐阅读
- firebase - 初始化 Firebase 会引发错误 - Flutter
- r - 从 for 循环绘图
- node.js - child_process.exec ffmpeg 无限期挂起
- javascript - 扩展所有工作表的搜索范围
- node.js - Bookshelf.js 中的条件
- javascript - 前后端共享类型定义
- meteor - 如何下载 Meteor Galaxy 上的所有日志
- python - 使用 subprocess.call 运行多个进程并获取它们的 pid 的 Python 脚本
- android - 未解决的参考:将 gradle 转换为 gradle.kts 时的 ext
- c++ - 反转三角形编号中的每一行