立即停止SFML tcpllistener

Instantly stop SFML TcpListener

本文关键字:SFML tcpllistener      更新时间:2023-10-16

在主线程上使用SFML TcpListener时,如何立即停止TcpListener::accept()函数?例如,如果我想要能够收到一个SIGINT和清理东西。要做到这一点,我需要能够让TcpListener::accept()函数返回断开连接或错误。

感谢Sean Cline建议的非阻塞模式和选择器

作为参考,SFML/Networking中的函数(我不确定它的其他组件)默认情况下是阻塞的,这意味着它们在完成目的(在我的情况下接受TCP连接)之前不会返回。通过使用非阻塞模式,函数将立即返回,返回其状态。对于TcpListener::accept(),如果有一个要接受的连接并且它成功地完成了任务,它将返回sf::Socket::Status::Done。否则,它可能返回sf::Socket::Status::Disconnectedsf::Socket::Status::NotReady

对于选择器,它们允许您在单个线程上管理多个套接字,并且在您不知道哪个将首先发送数据时特别有用。