我的应用程序有一个asio服务器套接字,必须接受来自已定义的IP列表的连接。
此过滤器必须由应用程序(而不是系统)完成,因为它可以随时更改(我必须能够随时更新此列表)
客户端必须收到acces_denied错误。
我想当调用handle_accept回调时,已经发送了SYN / ACK,所以当我检测到连接的ip est不被允许时,不要接受然后粗暴地关闭。我不管理客户端行为,也许当连接被拒绝并且只是被对等关闭时,它的行为不一样,所以我想做一切都干净。 (但这就是我现在的目标)
你知道我怎么做吗?
我的访问列表是std :: strings的容器(但我可以将其转换为其他东西的计数器....)
非常感谢
答案 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
}
}