c# - 可以通过编程方式终止 TCP/IP 堆栈吗?

标签 c# tcp

我们的服务器应用程序正在监听一个端口,一段时间后它不再接受传入的连接。 (虽然我很想解决这个问题,但这不是我在这里要问的;)

奇怪的是,当我们的应用程序停止接受端口 44044 上的连接时,IIS(端口 8080)也是如此。终止我们的应用程序可以解决所有问题 - IIS 再次开始响应。

所以问题是,一个应用程序会不会弄乱整个 TCP/IP 堆栈?或者,应用程序如何才能做到这一点?

毫无意义的细节:我们的应用程序是在 .Net 2.0 下,在 XP/SP2 上用 C# 编写的。

澄清:IIS 并非“拒绝”尝试的连接。它永远不会看到它们。客户端收到“服务器未及时响应”消息(使用 .Net TCP 客户端。)

最佳答案

您可能正在挨饿堆栈。在每秒高打开/关闭事务的环境中很容易耗尽,例如服务于大量未合并请求的网络服务器。

默认的 TIME-WAIT 延迟加剧了这一点——套接字在被回收之前必须关闭的时间默认为 90 秒(如果我没记错的话)

有很多可以调整的注册表项 - 建议至少创建/编辑以下项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

MSDN 和 Technet 上有大量关于这些键的功能的文档。

关于c# - 可以通过编程方式终止 TCP/IP 堆栈吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133442/

相关文章:

c# - 合并到语句和 Entity Framework

networking - 为什么 SCTP 使用不多/不为人所知

http - 为什么 HTTP 响应负载在 Wireshark tcp 流中显示为乱码?

tcp - 评估/诊断时间连接在建立之前处于 SYN_RECV 状态

java - 在 C 中以\0 结尾的串联字符串

c# - 部分声明不得指定不同的基类

c# - 无法使用 C# 访问 Windows 环境变量

c# - 返回非常大的字符串时 .asmx 请求超时

c# - 我的 Excel 2010 加载项仅在打开空白工作簿时显示。打开现有文档时不会显示

java - 使用 Netty 收到的消息是否可能出现故障或受到限制?