【发布时间】:2013-03-14 23:32:17
【问题描述】:
我的 c# 代码在 Windows vista/seven 中运行良好,但在 Windows XP 上却不行。
有问题的部分是“多播”节点,它基本上通过多播地址+端口读取和发送数据。
读取/写入网络的部分是单例。
每个访问这个单例的线程都必须指出它们何时需要开始监听,何时停止。
当至少一个线程需要“启动”时监听套接字,当所有线程“停止”时我们停止(他们必须给出一个 Guid 令牌,Start 方法返回)。
这种启动/停止机制是为了确保如果没有线程需要查看网络上发生的事情,我们不会为此消耗内存。
我遇到的问题是,在 windows XP 上,我遇到了这个异常:
System.Net.Sockets.SocketException (0x80004005): The I/O operation has been aborted because of either a thread exit or an application request
at System.Net.Sockets.Socket.EndReceiveFrom(IAsyncResult asyncResult, EndPoint& endPoint)
at System.Net.Sockets.UdpClient.EndReceive(IAsyncResult asyncResult, IPEndPoint& remoteEP)
经过一番搜索,在 Windows XP 及以下版本中,当线程结束时,操作系统会释放其所有 I/O 资源。 (VB.NET 3.5 SocketException on deployment but not on development machine)。
有没有办法避免这种行为?因为在我的情况下,我创建一个在执行结束之前结束的线程是很正常的,而且我不想释放它的套接字?
如果不可能,你将如何处理?
【问题讨论】:
标签: c# .net sockets windows-xp udpclient