我有一个udp客户端正在监听多播消息。当它收到消息时,消息将被解析,客户端将继续侦听。如果应用程序在socket.ReceiveFrom方法阻塞时被关闭,如何中断此进程并继续?
我让套接字在另一个线程上运行,我尝试向该线程发出一个中断,然后再连接,但是该中断无法工作,除非收到消息,否则socket.ReceiveFrom永远不会返回。
我还尝试在套接字上设置超时,但这并不理想,因为它会在超时时生成异常,而且由于我一直在侦听,所以我将生成大量超时,捕捉它们,然后再继续侦听。
我能在这里试试什么吗?
发布于 2009-07-20 21:36:05
找到了,我可以使套接字在被阻塞的线程之外可用,并可以调用一个socket.Close。这会中断并抛出一个SocketException。看起来还是有点脏,但它能把工作做完。
有人有更好的方法吗?
发布于 2009-11-27 22:03:00
我不是插槽专家,但还是可以尝试。
使用以下两种方法的组合可以形成一个非阻塞的套接字。
1)使用select函数与超时一起等待特定的套接字。超时后,检查是否还想在该套接字上等待。
( 2)使用O_NONBLOCK使您从非阻塞呼叫中恢复。http://www.kegel.com/dkftpbench/nonblocking.html
使用上面的链接来学习如何从非阻塞中重新计算.
搜索select。
https://stackoverflow.com/questions/1156058
复制相似问题