boost::asio::ip::tcp中几个重要类型

  • typedef basic_stream_socket

    流式套接字,提供同/异步发送接收数据,连接,绑定,设置套接字选项等功能
    对于socket中的connect()方法,它只针对某一个 endpoint 的连接

  • typedef basic_socket_acceptor

    用于服务器端接受新连接的套接字,此类中的accept()方法调用后,将阻塞直到有客户端连接或产生错误


void doit(socket_type s)
{
    // .......
}


namespace asio = boost::asio;

typedef shared_ptr<asio::ip::tcp::socket> socket_type;

asio::ip::tcp::endpoint server_endpoint(asio::ip::tcp::v4(), server_port);
asio::ip::tcp::acceptor acceptor(io_context, server_endpoint);
for ( ; ; )
{
    socket_type socket(new asio::ip::tcp::socket(io_context));
    acceptor.accept(*socket);

    boost::thread(boost::bind(doit, socket));
}
  • typedef basic_resolver

  • typedef basic_resolver_results

    提供了将查询解析为端点列表的能力, 调用类中的 resolve()方法将得到某个服务器所有可用的ip,并将结果以results_type类型返回。我们可以以resolve()返回的结果集为参数调用boost::asio::connect()方法去连接服务器,boost::asio::connect()方法将逐个尝试连接知道成功连接或产生错误。

namespace asio = boost::asio;

asio::io_context io_context;
asio::ip::tcp::socket s(io_context);
asio::ip::tcp::resolver resolver(io_context);
asio::ip::tcp::resolver::results_type peer_endpoints = 
        resolver.resolve("www.baidu.com", "http");
asio::connect(s, peer_endpoints);

// 和linux中的getaddrinfo函数相同

猜你喜欢

转载自www.cnblogs.com/Focus-Flying/p/9349481.html