首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问boost asio完成处理程序中的套接字句柄?

问如何访问boost asio完成处理程序中的套接字句柄?
EN

Stack Overflow用户
提问于 2014-02-27 02:02:18
回答 1查看 537关注 0票数 1

有没有可能访问boost asio异步完成处理程序中的套接字句柄?我查看了boost asio占位符,但没有存储套接字句柄的变量。

EN

回答 1

Stack Overflow用户

发布于 2014-02-27 02:16:31

您可以只安排它,无论如何,您将在boost或asio之外。

要绑定一个函数,该函数需要一个套接字来公开一个void()函数,您可以使用bind

代码语言:javascript
复制
int foo(std::string const& s, int);
std::function<void()> adapted = std::bind(foo, "hello world", 42);

所以,通常你会有类似下面这样的代码:

代码语言:javascript
复制
boost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator,
    boost::bind(&client::handle_connect, this, boost::asio::placeholders::error));

注意,通过使用绑定和this,我们已经将一个成员函数绑定到完成处理程序:

代码语言:javascript
复制
struct client
{
    // ....
    void handle_connect(boost::system::error_code err)
    {
        // you can just use `this->socket_` here
        // ...
    }
};

这意味着在handle_connect中,我们只能使用socket_成员变量。

然而,如果你想让事情变得复杂,你也可以使用免费函数

代码语言:javascript
复制
boost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator,
    boost::bind(&free_handle_connect, boost::ref(socket_), boost::asio::placeholders::error));

现在,隐含的处理程序函数如下所示

代码语言:javascript
复制
static void free_handle_connect(
    boost::asio::ip::tcp::socket& socket_,
    boost::system::error_code err)
{
    // using `socket_` as it was passed in
    int fd = _socket.native_handle_type();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22049526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档