-
typedef basic_stream_socket
socket;
流式套接字,提供同/異步發送接收數據,連接,綁定,設置套接字選項等功能
對於socket中的connect()
方法,它只針對某一個 endpoint 的連接
-
typedef basic_socket_acceptor
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
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函數相同