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


  • 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函數相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM