boost::asio 网络编程简明教程

acceptor 一般使用方法:

using boost::asio::ip::tcp;

boost::asio::io_context     io_context;
boost::system::error_code   ec;

tcp::acceptor   acceptor(io_context)
tcp::socket     socket(io_context);
tcp::endpoint   ep_listen(tcp::v4(), 13000);
tcp::endpoint   ep_peer;

acceptor.open(ep.protocol(), ec);
acceptor.bind(ep, ec);
acceptor.listen(5, ec);
acceptor.accept(socket, ep_peer, ec);

...

这其实是有些繁琐的, 实际上 acceptor 的构造函数还有这个:

basic_socket_acceptor(
    boost::asio::io_context & io_context,
    const endpoint_type & endpoint,
    bool reuse_addr = true);

这里我们可以传入一个 endpoint 作为第二个参数, 提供了这个 endpoint 参数的话,
acceptor 会同时帮我们做 open, bind, listen 三件事,
所以上述代码可以写成如下这么短:

using boost::asio::ip::tcp;

boost::asio::io_context     io_context;
boost::system::error_code   ec;

tcp::endpoint   ep;
tcp::acceptor   acceptor(io_context, tcp::endpoint(tcp::v4(), 13000))
tcp::socket     socket(io_context);

acceptor.accept(socket, ep, ec);

...
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.