天天看點

boost asio

  摘自: https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/Chapter2.html

  asio封裝了作業系統的select、kqueue、poll/epoll I/O等機制,實作異步IO模型。在同步模式下,程式發起一個IO操作,向io_service送出請求,io_service把操作轉交給作業系統,同步地等待。當IO操作完成時,作業系統通知io_service,然後io_service再把結果發回給程式,完成整個同步流程。在異步模式下,程式除了要發起IO操作,還要定義一個用于回調的完成處理函數。io_service同樣把IO操作轉交給作業系統執行,但它不同步等待,而是立即傳回。調用io_service的run()成員函數可以等待異步操作完成,當異步操作完成時io_service從作業系統擷取結果,在調用handler執行後續邏輯;

  用于TCP通信的typedef類型,包括端點類endpoint、套接字類socket、流類iostream,以及接收器acceptor、解析器resolver等。 

class tcp

{

public:

/// The type of a TCP endpoint.

  typedef basic_endpoint<tcp> endpoint;   // 包含IP位址和通信用的端口号

/*****************************************************************************************/

  endpoint():這是預設構造函數,某些時候可以用來建立UDP/ICMP socket; 

  endpoint(protocol, port):這個方法通常用來建立可以接受新連接配接的伺服器端socket;

  endpoint(addr, port):這個方法建立了一個連接配接到某個位址和端口的端點;

/*****************************************************************************************/

/// The TCP socket type.

  typedef basic_stream_socket<tcp> socket;

/// The TCP acceptor type.

  typedef basic_socket_acceptor<tcp> acceptor;

/// The TCP resolver type.

  typedef basic_resolver<tcp> resolver;

/// The TCP iostream type.

  typedef basic_socket_iostream<tcp> iostream;

/// ......

};

  acceptor對應Socket API的accept()函數,用于伺服器端。acceptor可以像傳統socket API一樣使用,open()打開端口,bind()綁定再用listen()偵聽端口,但更友善的是使用它的構造函數,傳入endpoint直接完成這三個動作;

未完, 待續,,