@john-lee
2021-01-03T11:37:42.000000Z
字数 4166
阅读 753
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::acceptor For UDP: ip::udp::socket basic_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::endpoint For UDP: ip::udp::endpoint ip::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)