立即停止 SFML TcpListener

Instantly stop SFML TcpListener

在主线程上使用 SFML TcpListener 时,如何立即停止 TcpListener::accept() 函数?例如,如果我希望能够接收到 SIGINT 并进行清理。为此,我需要能够让 TcpListener::accept() 函数 return 断开连接,或者出错。

感谢 Sean Cline 的建议 non-blocking mode and selectors

作为参考,SFML/Networking 中的函数(我不确定它的其他组件)默认情况下是阻塞的,这意味着它们不会 return 直到它们完成它们的目的(接受TCP 连接,在我的例子中)。通过使用 non-blocking mode,该函数将立即 return,return 显示其状态。对于 TcpListener::accept(),如果有一个连接被接受并且它成功完成任务,它将 return sf::Socket::Status::Done。否则,它可能 return sf::Socket::Status::Disconnectedsf::Socket::Status::NotReady.

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