C#设置接收超时(最佳/足够时间)

时间:2018-06-08 09:21:23

标签: c# .net tcp websocket

我想知道接收/发送超时的最佳时间是什么

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秒

1 个答案:

答案 0 :(得分: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.

我会将接收超时保留为默认值(无限),因此当您有空闲通道时,连接将不会关闭。除非你有keep-alive运行,它定期发送一个零字节的消息。

发送超时您必须小心将值设置得太低。 TCP是可靠的意味着每个数据报获得一个ack。当没有发送确认时,另一个数据报通常会发送3次重试。

当一个通道缓慢重试开始发生时,TCP会发生什么情况,这会发送额外的重复数据报,然后更频繁地减慢通道速度,直到有太多重试没有数据通过。

此外,当连接的接收端运行缓慢时,ack可能不会立即返回。所以你必须允许接收结束时间发出确认。通常,ack由网卡自动完成,不应该是一个问题。

此外,您还必须考虑是否有拦截邮件的病毒检查程序或防火墙。