繁体   English   中英

如何终止从套接字c ++读取线程?

[英]How terminate thread reading from socket c++?

在c ++中,“ recvfrom”函数是一个阻止函数(阻止线程直到数据包到达)。

我如何安全地终止“ recvfrom”中阻塞的线程?

通过仅在成功返回select / poll / epoll后才调用recvfrom避免这种情况。

就像评论中提到的@Remy Lebeau一样,您可以上拉以下内容:

while(run_flag) {
    if(check select/poll/epoll) {
         recvfrom(..)
    }
}

您可以开始使用epoll并在此处选择 互联网上也有很多。

另一种方法是使用异步网络操作而不是线程。

我可能还会建议使用boost :: asio,因为这只会简化您的所有网络工作。

使用“自管”技巧。

使用pipe(2)系统调用打开管道。 使用select / poll / kqueue /从您关心的套接字和管道中读取的任何内容循环坐下。 从套接字获取数据时,请像往常一样处理它。

要停止线程,请关闭要停止处理的线程中管道的另一端。 您将在管道上将其检测为EOF,然后将其用作停止线程处理实际套接字的信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM