【发布时间】:2011-08-12 17:50:32
【问题描述】:
我开始使用 Boost Asio 的 TCP 套接字。 read_some 和 receive 有什么区别,write_some 和 send 有什么区别?谢谢!
【问题讨论】:
标签: c++ boost boost-asio
我开始使用 Boost Asio 的 TCP 套接字。 read_some 和 receive 有什么区别,write_some 和 send 有什么区别?谢谢!
【问题讨论】:
标签: c++ boost boost-asio
据我所知,read_some 和 receive 实际上是在做同样的事情。我认为只接收调用 read_some 或反之亦然。一个命名来自将套接字视为文件(读/写)的想法,而另一个命名来自连接(发送/接收)点看法。 write_some 和 send 也应该如此。
【讨论】:
send/receive。
在BOOST ASIO documentation,TCP Clients 部分说:
可以使用 receive()、async_receive()、send() 或 async_send() 成员函数。 但是,由于这些可能导致short writes or reads, 应用程序通常会使用以下操作: read()、async_read()、write() 和 async_write()。
【讨论】:
一样。都调用 this->get_service().send()
/// Send some data on the socket.
/**
* This function is used to send data on the stream socket. The function
* call will block until one or more bytes of the data has been sent
* successfully, or an until error occurs.
*
* @param buffers One or more data buffers to be sent on the socket.
*
* @returns The number of bytes sent.
*
* @throws boost::system::system_error Thrown on failure.
*
* @note The send operation may not transmit all of the data to the peer.
* Consider using the @ref write function if you need to ensure that all data
* is written before the blocking operation completes.
*
* @par Example
* To send a single data buffer use the @ref buffer function as follows:
* @code
* socket.send(boost::asio::buffer(data, size));
* @endcode
* See the @ref buffer documentation for information on sending multiple
* buffers in one go, and how to use it with arrays, boost::array or
* std::vector.
*/
template <typename ConstBufferSequence>
std::size_t send(const ConstBufferSequence& buffers)
{
boost::system::error_code ec;
std::size_t s = this->get_service().send(
this->get_implementation(), buffers, 0, ec);
boost::asio::detail::throw_error(ec, "send");
return s;
}
////////////////////////////////////////////
template <typename ConstBufferSequence>
std::size_t write_some(const ConstBufferSequence& buffers)
{
boost::system::error_code ec;
std::size_t s = this->get_service().send(
this->get_implementation(), buffers, 0, ec);
boost::asio::detail::throw_error(ec, "write_some");
return s;
}
来自 basic_stream_socket.hpp
【讨论】: