检查是否准备接受Basic_Socket_Acceptor

Check if basic_socket_acceptor is ready to accept

本文关键字:Basic Socket Acceptor 是否 检查      更新时间:2023-10-16

我正在使用网络TS编写一个简单的单线TCP服务器。为了接受传入的连接,我创建std::experimental::net::ip::tcp::acceptor并调用accept成员函数。但是如果没有连接可以接受,我不想要它。我如何检查受体是否准备接受?

显然,如果有一个最终调用select的函数,它将暴露出竞赛条件。正确的方法是将受体设置为非阻滞。

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
}