为什么TcpListener没有实现IDisposable接口?

7
为了更好地理解.NET网络部分的工作原理,我正在查看TcpListener(文档, 参考源代码)类的参考源代码。引起我的注意的是它拥有实现IDisposable接口的对象(Socket),但本身并没有实现IDisposable接口。这是有原因的吗?

在我看来,没有这样的理由。只是开发人员的失误。 - Dennis
2
TcpListener是一个辅助类,旨在简化实现TCP服务器的过程。IDisposable从未使任何事情变得容易。不释放套接字并不是一个严重的问题,它使用非常少的系统资源。它的终结器可以很好地完成工作。特别是在适合使用TcpListener的简单场景中,即创建一个监听器仅一次,并让其在进程的整个生命周期内保持活动状态的程序类型中,这是一种特性而不是错误。 - Hans Passant
@HansPassant:未正确处理套接字可能会导致远程主机上的资源消耗过度。如果该远程主机是一个小型嵌入式微型计算机,则其有用性可能会受到严重影响,直到终结器运行或其网络套接字超时。 - supercat
1
那是毫无意义的恐吓,使用Stop()方法。 - Hans Passant
1个回答

0
因为当您使用基于IPEndPoint构造函数时,TcpListener不拥有该套接字。如果您计划重用该IPEndPoint对象,则处理该套接字会非常粗鲁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接