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