2016-08-19 186 views
3

我剛纔只注意到async_write_someasync_send(第二過載)在boost::asio功能是完全一樣的:的boost :: ASIO async_write_some VS async_send

async_write_some defenition:

... 
template <typename ConstBufferSequence, typename WriteHandler> 
    BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler, 
     void (boost::system::error_code, std::size_t)) 
    async_write_some(const ConstBufferSequence& buffers, 
     BOOST_ASIO_MOVE_ARG(WriteHandler) handler) 
    { 
    // If you get an error on the following line it means that your handler does 
    // not meet the documented type requirements for a WriteHandler. 
    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check; 

    return this->get_service().async_send(this->get_implementation(), 
     buffers, 0, BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)); 
    } 
... 

async_send定義:

... 
template <typename ConstBufferSequence, typename WriteHandler> 
    BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler, 
     void (boost::system::error_code, std::size_t)) 
    async_send(const ConstBufferSequence& buffers, 
     BOOST_ASIO_MOVE_ARG(WriteHandler) handler) 
    { 
    // If you get an error on the following line it means that your handler does 
    // not meet the documented type requirements for a WriteHandler. 
    BOOST_ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check; 

    return this->get_service().async_send(
     this->get_implementation(), buffers, 0, 
     BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)); 
    } 
... 

爲什麼在boost::asio中有兩個相同的功能 圖書館?有什麼歷史原因嗎?

謝謝!

回答

3

他們提供了兩種不同的抽象:

  • stream.async_write_some()允許一個一般寫的異步I/O流對象。例如,這種抽象允許更高級別的組合操作一般寫入ip::tcp::socket,ssl:stream,serial_port等。async_write_some()成員函數是AsyncWriteStream類型要求的一部分。
  • socket.async_send()允許人們在不考慮協議的情況下統一寫入套接字。例如,這種抽象允許一般寫入ip::tcp::socket,ip::udp::socket,local::*_protocol::socketgeneric::*_protocol::socketsocket.async_send()模型與已建立的BSD套接字API密切相關。
+0

謝謝!這是合乎邏輯的) –