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函数相同