我需要允许使用 System.Net.Sockets.Socket 连接到 FTP 服务器需要很长时间 - 至少 30 秒但可能更多。此代码总是在收到信号后返回,但在 20 秒后未连接,这显然是内部默认设置:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IAsyncResult result = socket.BeginConnect("128.0.0.1", 99, null, null);
bool signalled = result.AsyncWaitHandle.WaitOne(60000, true);
最佳答案
老问题,但我们遇到了同样的问题,所以我会在这里发布我们的解决方案。
WaitOne 超时可用于强制低于系统默认超时,但如果您想增加超时(即在您的系统中超过 20 秒例)您必须更改底层操作系统的 TCP 设置。
我们在 Windows 上遇到了这个问题,我们遇到了 21 秒的硬超时限制。要更改此设置,您可以使用以下 PowerShell 命令(以管理员身份运行 PowerShell 提示符):
Set-NetTCPSetting -SettingName InternetCustom -MaxSynRetransmissions 4
默认值为 2,这会产生大约 21 秒的有效 TCP 连接超时。值 3 将超时增加到大约 40 秒,4 增加到大约 90 秒。可以找到更多信息 here .
对于 Linux,请查看这篇文章: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout
关于c# - 增加 System.Net.Sockets.Socket 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341885/