C# 配置套接字确认超时?
是否有一种方法可以配置套接字在确定连接失败之前接收已发送数据的ACK的超时时间 我知道这也可以在应用程序级别上完成,但由于我发送的每个数据包都是经过确认的,我只想知道是否收到了我的数据,因此在应用程序级别使用其他数据来完成同样的事情似乎是浪费。(更不用说,我的特定应用程序使用每字节收费的蜂窝链路。) 注意:根据我前面的问题--C# 配置套接字确认超时?,c#,sockets,network-programming,tcpclient,C#,Sockets,Network Programming,Tcpclient,是否有一种方法可以配置套接字在确定连接失败之前接收已发送数据的ACK的超时时间 我知道这也可以在应用程序级别上完成,但由于我发送的每个数据包都是经过确认的,我只想知道是否收到了我的数据,因此在应用程序级别使用其他数据来完成同样的事情似乎是浪费。(更不用说,我的特定应用程序使用每字节收费的蜂窝链路。) 注意:根据我前面的问题-- --您不能依靠。Write引发异常来确定数据发送不正确。您可以使用TcpClient.SendTimeout来执行此操作。如果指定的超时在操作成功完成之前过期,则会导致写
--您不能依靠
。Write
引发异常来确定数据发送不正确。您可以使用TcpClient.SendTimeout
来执行此操作。如果指定的超时在操作成功完成之前过期,则会导致写入操作抛出SocketException
此外,有关如何设置具有更多可定制和可靠超时的套接字的更多信息,请参阅本页:
在一些IETF RFC()中提到了“用户超时”,它完成了要求的任务
其他一些操作系统将此作为套接字选项支持,但不幸的是,Windows不支持
如果没有此选项,在这种情况下,缩短中止时间的唯一方法是减少重传尝试次数,或减少初始RTT
在Windows上,前者可以通过netsh/registry进行控制(计算机范围..)
是否可以通过自己的超时放弃当前连接,并在需要时进行另一次连接
- 应用程序必须确定何时放弃连接——可能是在TCP会话开始时根据不活动时间或有效数据速率确定的“生存时间”
- 由于旧连接的重新传输,会有一点数据开销
- 服务器应用可能需要更改以接受多个并发连接
- 这个过程不应该被客户端不确定地重复,以防网络无法达到足够的超时速度