我正在使用Networking TS编写一个简单的单线程TCP服务器。为了接受传入的连接,我创建了std::experimental::net::ip::tcp::acceptor
并调用accept
成员函数。但是,如果没有可以接受的连接,它就会阻塞,我不希望那样。我如何检查接受者是否准备好接受?
最佳答案
显然,如果有一个最终调用select
的函数,它将公开一个race condition。正确的方法是将受体设置为非阻塞。
std::experimental::net::io_context context;
std::experimental::net::ip::tcp::acceptor acceptor{context,
std::experimental::net::ip::tcp::endpoint{
std::experimental::net::ip::tcp::v4(), 1234}};
acceptor.non_blocking(true);
std::error_code error;
while (true)
{
auto socket = acceptor.accept(error);
if (!error)
{
// Handle incoming connection
}
// Do other stuff
}