【发布时间】:2014-06-05 23:35:08
【问题描述】:
我创建了一个完美运行的服务器。然而,当我决定针对 DDoS 攻击对其进行测试时,我发现了一个严重的内存泄漏。下面的代码将填满 RAM(当 DDoS 发生时)并最终使我的计算机崩溃。我试图实施对策,但内存泄漏仍然存在。我目前的收听代码是:
TcpClient connection = server.AcceptTcpClient();
if (!IpByConnection.ContainsKey(connection.Client.RemoteEndPoint.ToString().Split(':')[0])) {
IpByConnection.Add(connection.Client.RemoteEndPoint.ToString().Split(':')[0], connection);
CipherNetwork network = new CipherNetwork(connection);
network.ListenOnDifferentThread(true);
network.DisconnectOnError(true);
network.StartListening();
TotalConnections += 1;
} else {
connection.Close();
}
我将如何解决这个内存泄漏?
编辑:我忘了提,该方法在单独的线程上运行。
编辑 2:我尝试将其设置为 null,然后将其丢弃。
【问题讨论】:
-
您有问题吗?
-
编辑了帖子 - 添加了问题。
-
顺便说一句。虽然与您的问题无关,但如果拥有 IPV6 地址的人连接的地址与其中存在的
:一样多,您的服务将失败。 -
@ScottChamberlain 我计划在完成核心功能后添加 IPV6 支持。
-
只需将
EndPoint转换为IPEndPoint并使用Address属性。在the documentation ofRemoteEndPoint中说要做到这一点(参见“备注”的第一段)
标签: c# networking memory-leaks tcpclient connection