代码之家  ›  专栏  ›  技术社区  ›  Kelly

如何中断socket.receivefrom调用?

  •  0
  • Kelly  · 技术社区  · 16 年前

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

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

    我还尝试在套接字上设置超时,但这并不理想,因为它会在超时时生成异常,而且由于我一直在侦听,我将生成大量超时,捕获它们,然后返回到侦听。

    有什么我可以在这里试试的吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Kelly    16 年前

    我发现我可以在被阻塞的线程外使用套接字,并可以调用socket.close。这会中断并引发socketException。看起来还是有点脏,但能完成任务。

    有人有更好的方法吗?

        2
  •  0
  •   user220263    15 年前

    我不是插座专家,但仍然可以尝试。

    使用以下两种方法的组合来生成非阻塞套接字。

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

    2)使用o_nonblock使您从调用非阻塞中恢复。 http://www.kegel.com/dkftpbench/nonblocking.html

    使用上面的链接来研究如何使recvFrom不阻塞。

    谷歌选择。