我有一个正在侦听多播消息的udp客户端。当它收到消息时,消息被解析,客户端继续收听。如果应用程序在socket.ReceiveFrom方法阻塞时关闭,如何中断此过程并继续?
我让套接字在另一个线程上运行,我试图向该线程发出一个中断然后加入,但是中断不起作用socket.ReceiveFrom永远不会返回,除非它收到消息。
我也尝试在套接字上设置超时,但这并不理想,因为它会在超时时生成异常,因为我总是在听我会产生大量的超时,捕获它们然后再回到听着。
我可以在这里尝试任何想法吗?
答案 0 :(得分:1)
发现我可以在被阻塞的线程外部使套接字可用,并且可以调用socket.Close。这会中断并抛出SocketException。仍然看起来有点脏,但它完成了工作。
任何人都有更好的方法吗?
答案 1 :(得分:0)
我不是套接字专家,但仍可以尝试。
使用以下两项组合来制作非阻塞套接字。
1)使用带超时的select函数在特定套接字上等待。超时检查后是否仍要等待该套接字。
2)使用O_NONBLOCK让你重新调用非阻塞。 http://www.kegel.com/dkftpbench/nonblocking.html
使用上面的链接来研究如何使recvfrom非阻塞。
谷歌选择。