boost::asio::ip::tcp中幾個重要類型

  • typedef basic_stream_socket socket;

    流式套接字,提供同/異步發送接收數據,鏈接,綁定,設置套接字選項等功能
    對於socket中的connect()方法,它只針對某一個 endpoint 的鏈接linux

  • typedef basic_socket_acceptor acceptor;

    用於服務器端接受新鏈接的套接字,此類中的accept()方法調用後,將阻塞直到有客戶端鏈接或產生錯誤c++

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 resolver;

  • typedef basic_resolver_results results_type;

    提供了將查詢解析爲端點列表的能力, 調用類中的 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函數相同
相關文章
相關標籤/搜索