你如何打断socket.ReceiveFrom?

时间:2009-07-20 21:28:38

标签: c# udp

我有一个正在侦听多播消息的udp客户端。当它收到消息时,消息被解析,客户端继续收听。如果应用程序在socket.ReceiveFrom方法阻塞时关闭,如何中断此过程并继续?

我让套接字在另一个线程上运行,我试图向该线程发出一个中断然后加入,但是中断不起作用socket.ReceiveFrom永远不会返回,除非它收到消息。

我也尝试在套接字上设置超时,但这并不理想,因为它会在超时时生成异常,因为我总是在听我会产生大量的超时,捕获它们然后再回到听着。

我可以在这里尝试任何想法吗?

2 个答案:

答案 0 :(得分:1)

发现我可以在被阻塞的线程外部使套接字可用,并且可以调用socket.Close。这会中断并抛出SocketException。仍然看起来有点脏,但它完成了工作。

任何人都有更好的方法吗?

答案 1 :(得分:0)

我不是套接字专家,但仍可以尝试。

使用以下两项组合来制作非阻塞套接字。

1)使用带超时的select函数在特定套接字上等待。超时检查后是否仍要等待该套接字。

2)使用O_NONBLOCK让你重新调用非阻塞。 http://www.kegel.com/dkftpbench/nonblocking.html

使用上面的链接来研究如何使recvfrom非阻塞。

谷歌选择。