在主线程上使用SFML TcpListener时,如何立即停止TcpListener::accept()函数?例如,如果我希望能够接收SIGINT并进行清理。要做到这一点,我需要能够让TcpListener::accept()函数返回Disconnected或Error。
发布于 2016-08-12 10:28:34
感谢Sean Cline推荐non-blocking mode和selectors。
作为参考,SFML/Networking中的函数(我不确定它的其他组件)在默认情况下是阻塞的,这意味着它们不会返回,直到它们完成了它们的目的(在我的例子中,接受TCP连接)。通过使用non-blocking mode,函数将立即返回,并返回其状态。对于TcpListener::accept(),如果有要接受的连接并且成功地完成了任务,它将返回sf::Socket::Status::Done。否则,它可能返回sf::Socket::Status::Disconnected或sf::Socket::Status::NotReady。
至于selectors,它们允许您在单个线程上管理多个套接字,并且在您不知道哪个套接字将首先发送数据时特别有用。
https://stackoverflow.com/questions/38908045
复制相似问题