立即停止SFML TcpListener
问题描述:
在主线程上使用SFML TcpListener
时,如何立即停止TcpListener::accept()
函数?例如,如果我想能够收到SIGINT
并清理干净。为此,我需要能够使TcpListener::accept()
函数返回断开连接或错误。立即停止SFML TcpListener
答
感谢Sean Cline建议non-blocking mode和selectors。
作为参考,SFML /网络中的函数(我不确定其它组件)在默认情况下处于阻塞状态,这意味着它们在完成目的之前不会返回(在我的情况下接受TCP连接) 。通过使用non-blocking mode,函数将立即返回,并返回其状态。对于TcpListener::accept()
,如果有连接被接受并且成功完成任务,它将返回sf::Socket::Status::Done
。否则,它可能会返回sf::Socket::Status::Disconnected
或sf::Socket::Status::NotReady
。
至于selectors,它们允许您在单个线程上管理多个套接字,特别适用于不知道哪个数据先发送数据。
你可以从下面关闭插座吗? – user4581301
@ user4581301我该怎么做? –
'TcpListener :: close'。 [Documentation](http://www.sfml-dev.org/documentation/2.0/classsf_1_1TcpListener.php#ae2c83ce5a64d50b68180c46bef0a7346)说:“这个函数正常地停止监听器,如果socket没有监听,这个函数不起作用。” – user4581301