boost :: asio async_accept拒绝连接

时间:2010-08-20 11:44:38

标签: c++ sockets boost boost-asio

我的应用程序有一个asio服务器套接字,必须接受来自已定义的IP列表的连接。

此过滤器必须由应用程序(而不是系统)完成,因为它可以随时更改(我必须能够随时更新此列表)

客户端必须收到acces_denied错误。

我想当调用handle_accept回调时,已经发送了SYN / ACK,所以当我检测到连接的ip est不被允许时,不要接受然后粗暴地关闭。我不管理客户端行为,也许当连接被拒绝并且只是被对等关闭时,它的行为不一样,所以我想做一切都干净。 (但这就是我现在的目标)

你知道我怎么做吗?

我的访问列表是std :: strings的容器(但我可以将其转换为其他东西的计数器....)

非常感谢

2 个答案:

答案 0 :(得分:5)

async_accept方法有一个重载来获取对等端点。您可以在async_accept处理程序中比较该值。如果它与容器中的条目不匹配,请让套接字超出范围。否则,请根据您的应用程序处理它。

答案 1 :(得分:0)

我不知道您的应用的详细信息,但这就是我的方式。

在accept handler / lambda

void onAccept(shared_ptr<connection> c, error_code ec)
{
    if (ec) { /*... */ }
    if (isOnBlackList(c->endpoint_))
    {
       c->socket_.async_write( /* a refusal message */, 
         [c](error_code, n) 
         { 
            c->socket_.shutdown();
            // c fizzles out of all contexts... 
         });
    }
    else
    {
        // successful connection execution path
    }
}