2016-08-12 122 views
0

在主線程上使用SFML TcpListener時,如何立即停止TcpListener::accept()函數?例如,如果我想能夠收到SIGINT並清理乾淨。爲此,我需要能夠使TcpListener::accept()函數返回斷開連接或錯誤。立即停止SFML TcpListener

+0

你可以從下面關閉插座嗎? – user4581301

+0

@ user4581301我該怎麼做? –

+0

'TcpListener :: close'。 [Documentation](http://www.sfml-dev.org/documentation/2.0/classsf_1_1TcpListener.php#ae2c83ce5a64d50b68180c46bef0a7346)說:「這個函數正常地停止監聽器,如果socket沒有監聽,這個函數不起作用。」 – user4581301

回答

0

感謝Sean Cline建議non-blocking modeselectors

作爲參考,SFML /網絡中的函數(我不確定其它組件)在默認情況下處於阻塞狀態,這意味着它們在完成目的之前不會返回(在我的情況下接受TCP連接) 。通過使用non-blocking mode,函數將立即返回,並返回其狀態。對於TcpListener::accept(),如果有連接被接受並且成功完成任務,它將返回sf::Socket::Status::Done。否則,它可能會返回sf::Socket::Status::Disconnectedsf::Socket::Status::NotReady

至於selectors,它們允許您在單個線程上管理多個套接字,特別適用於不知道哪個數據先發送數據。