立即停止 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::Disconnected
或 sf::Socket::Status::NotReady
.
至于 selectors,它们允许您在单个线程上管理多个套接字,并且在您不知道哪个将首先发送数据时特别有用。
在主线程上使用 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::Disconnected
或 sf::Socket::Status::NotReady
.
至于 selectors,它们允许您在单个线程上管理多个套接字,并且在您不知道哪个将首先发送数据时特别有用。