@john-lee
2021-01-03T11:37:42.000000Z
字数 4166
阅读 855
Boost.Asio
Boost.Asio 库包括一个基于 BSD 套接字 API 的底层socket接口,该接口广泛实现并得到大量文献的支持。它还用作其他语言(如 Java)中的 API 网络基础。此低级接口旨在支持高效且可扩展的应用程序开发。例如,它允许程序员对系统调用的数量进行更精细的控制,避免冗余的数据复制,最大限度地减少对资源(如线程)的使用,等等。
不包括 BSD 套接字 API 的不安全和易出错方面。例如,使用int表示所有套接字缺乏类型安全性。Boost.Asio 中的套接字表示对每个协议使用不同的类型,例如,对于 TCP,使用ip::TCP::socket,对于 UDP,使用ip::UDP::socket。
下表显示了 BSD 套接字 API 和 Boost.Asio 之间的映射:
| BSD 套接字 API 元素 | Boost.Asio 中的等效项 |
|---|---|
套接字描述符 - int(POSIX)或SOCKET(Windows) |
For TCP: ip::tcp::socket,ip::tcp::acceptorFor UDP: ip::udp::socketbasic_socket, basic_stream_socket, basic_datagram_socket, basic_raw_socket |
in_addr,in6_addr |
ip::address, ip::address_v4, ip::address_v6 |
sockaddr_in,sockaddr_in6 |
For TCP:ip::tcp::endpointFor UDP: ip::udp::endpointip::basic_endpoint |
accept() |
For TCP:ip::tcp::acceptor::accept()basic_socket_acceptor::accept() |
bind() |
For TCP:ip::tcp::acceptor::bind(), ip::tcp::socket::bind()For UDP: ip::udp::bind()basic_socket::bind() |
close() |
For TCP:ip::tcp::acceptor::close(), ip::tcp::socket::close()For UDP: ip::udp::socket::close()basic_socket::close() |
connect() |
For TCP:ip::tcp::socket::connect()For UDP: ip::udp::socket::connect()basic_socket::connect() |
getaddrinfo(), gethostbyaddr(), gethostbyname(), getnameinfo(), getservbyname(), getservbyport() |
For TCP:ip::tcp::resolver::resolve(), ip::tcp::resolver::async_resolve()For UDP: ip::udp::resolver::resolve(), ip::udp::resolver::async_resolve()ip::basic_resolver::resolve(), ip::basic_resolver::async_resolve() |
gethostname() |
ip::host_name() |
getpeername() |
For TCP:ip::tcp::socket::remote_endpoint()For UDP: ip::udp::socket::remote_endpoint()basic_socket::remote_endpoint() |
getsockname() |
For TCP:ip::tcp::acceptor::local_endpoint(), ip::tcp::socket::local_endpoint()For UDP: ip::udp::socket::local_endpoint()basic_socket::local_endpoint() |
getsockopt() |
For TCP:ip::tcp::acceptor::get_option(), ip::tcp::socket::get_option()For UDP: ip::udp::socket::get_option()basic_socket::get_option() |
inet_addr(), inet_aton(), inet_pton() |
ip::address::from_string(), ip::address_v4::from_string(), ip_address_v6::from_string() |
inet_ntoa(), inet_ntop() |
ip::address::to_string(), ip::address_v4::to_string(), ip::address_v6::to_string() |
ioctl() |
For TCP:ip::tcp::socket::io_control()For UDP: ip::udp::io_control()basic_socket::io_control() |
listen() |
For TCP:ip::tcp::acceptor::listen()basic_socket_acceptor::listen() |
poll(), select(), pselect() |
io_context::run(), io_context::run_one(), io_context::poll(), io_context::poll_one()注意:与异步操作结合使用。 |
readv(), recv(), read() |
For TCP:ip::tcp::socket::read_some(), ip::tcp::socket::async_read_some(), ip::tcp::socket::receive(), ip::tcp::socket::async_receive()For UDP: ip::udp::socket::receive(), ip::udp::socket::async_receive()basic_stream_socket::read_some(), basic_stream_socket::async_read_some(), basic_stream_socket::receive(), basic_stream_socket::async_receive(), basic_datagram_socket::receive(), basic_datagram_socket::async_receive() |
recvfrom() |
For UDP:ip::udp::socket::receive_from(), ip::udp::async_receive_from()basic_datagram_socket::receive_from(), basic_datagram_socket::async_receive_from() |
send(), write(), writev() |
For TCP: ip::tcp::socket::write_some(), ip::tcp::socket::async_write_some(), ip::tcp::socket::send(), ip::tcp::socket::async_send()For UDP: ip::udp::socket::send(), ip::udp::socket::async_send()basic_stream_socket::write_some(), basic_stream_socket::async_write_some(), basic_stream_socket::send(), basic_stream_socket::async_send(), basic_datagram_socket::send(), basic_datagram_socket::async_send() |
sendto() |
For UDP:ip::udp::socket::send_to(), ip::udp::socket::async_send_to()basic_datagram_socket::send_to(), basic_datagram_socket::async_send_to() |
setsockopt() |
For TCP: ip::tcp::acceptor::set_option(), ip::tcp::socket::set_option()For UDP: ip::udp::socket::set_option()basic_socket::set_option() |
shutdown() |
For TCP:ip::tcp::socket::shutdown()For UDP: ip::udp::socket::shutdown() <br/>basic_socket::shutdown()` |
sockatmark() |
For TCP:ip::tcp::socket::at_mark()basic_socket::at_mark() |
socket() |
For TCP:ip::tcp::acceptor::open(), ip::tcp::socket::open()For UDP: ip::udp::socket::open()basic_socket::open() |
socketpair() |
local::connect_pair()注意:仅 POSIX 操作系统。 |
Copyright © 2003-2020 Christopher M. Kohlhoff
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)