[关闭]
@john-lee 2021-01-03T11:37:42.000000Z 字数 4166 阅读 754

BSD 套接字 API 和 Boost.Asio(The BSD Socket API and Boost.Asio)

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::socketip::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)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注