有没有办法配置套接字在决定连接失败之前期望收到已发送数据的 ACK 的超时?
我知道这也可以在应用程序级别完成,但是由于我发送的每个数据包都已被确认,并且我只想知道是否收到了我的数据,因此在应用程序级别使用附加数据来完成相同的任务事情似乎很浪费。 (更不用说,我的特定应用程序使用按字节收费的蜂窝链接。)
Note:根据我之前的问题——什么情况会导致 NetworkStream.Write 阻塞? https://stackoverflow.com/questions/7667254/what-conditions-cause-tcpclient-write-to-block——你不能依赖.Write
抛出异常以确定数据未正确发送。
一些 IETF RFC 中提到了“用户超时”(5482 http://datatracker.ietf.org/doc/rfc5482/ 793 http://datatracker.ietf.org/doc/rfc793/)它执行所要求的操作。
不幸的是,其他一些操作系统支持将此作为套接字选项,但 Windows 不支持。
如果没有此选项,在这种情况下减少中止时间的唯一方法是减少重传尝试的次数,或减少初始 RTT。
在 Windows 上,前者可以通过 netsh/registry 进行控制(机器范围......):Tcp 最大数据重传数 http://technet.microsoft.com/en-us/library/cc938210.aspx.
是否可以通过自己的超时来放弃当前连接,并在需要时建立另一个连接?
- 应用程序必须确定何时放弃连接 - 可能在 TCP 会话开始时根据不活动时间或有效数据速率确定一些“生存时间”
- 由于旧连接的重传,会产生一些数据开销
- 服务器应用程序可能需要更改以接受多个并发连接
- 客户端不应无限期地重复此过程,以防网络永远无法达到超时所需的足够速度
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)