检查basic_socket_acceptor是否已准备好接受

问题描述 投票:0回答:1

我正在使用Networking TS编写一个简单的单线程TCP服务器。为了接受传入的连接,我创建std::experimental::net::ip::tcp::acceptor并调用accept成员函数。但如果没有连接可以阻止,我就不会这样做。如何检查接受器是否已准备好接受?

c++ sockets networking
1个回答
1
投票

显然,如果有一个函数最终会调用select,它会暴露一个race condition。正确的方法是将acceptor设置为非阻塞。

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
}
© www.soinside.com 2019 - 2024. All rights reserved.