2010-08-20 169 views
5

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

该过滤器必须由应用程序来完成,(不是由系统),因为它可以在任何时间改变(我必须能够更新该名单在任何时间)

客户端必须接收acces_denied错误。

我想当handle_accept回调被调用时,SYN/ACK已经被发送,所以当我检测到连接的ip est不被允许时,不想接受然后关闭。我不管理客户的行为,也许当连接被拒绝并且被同伴关闭时,它的行为不一样,所以我想干净一切。 (但它是目前即时的东西)

你知道我该怎么做吗?

我的访问列表是性病::字符串的容器(但我可以把它转换成别的东西一countainer ....)

非常感谢您

+0

我想使用ASIO你不能做到这一点 – gomons 2015-06-17 18:58:14

回答

4

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

0

我不知道你的应用程序的细节,但这是我该怎么做。

在接受处理/λ

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 
    } 
}