我正在阅读boost端点文档并看到了 size()和resize()成员函数。 文档说明:获取本机类型中端点的基础大小。 这个大小代表什么,它可以在哪里使用/调整大小? 感谢。
答案 0 :(得分:3)
正如文档所述,boost::asio::ip::basic_endpoint
是一个对象:
描述了a的端点 与版本无关的IP套接字。
在这种情况下,“端点”通常是指IP地址和端口。根据您正在使用的协议的操作系统和,端点的“本机”表示形式(操作系统用于较低级别的套接字API的表示形式)可能不同,因此{{1用作本机端点类型的包装器。
要解决有关basic_endpoint
和size()
实际执行的问题,我认为答案“并不多”,而不是作为获取基础端点大小的便携方式表示。
在类UNIX系统上(抱歉,我没有关于Windows的详细信息:o),基础端点类型通常为resize()
用于IPv4,struct sockaddr_in
用于IPv6(在{{1}中定义) })。因此struct sockaddr_in6
将返回netinet/in.h
其中一个结构,具体取决于size()
的构造方式。有关sizeof
系列结构的详细信息,请参阅此处:http://www.retran.com/beej/sockaddr_inman.html
事实上,basic_endpoint
的代码看起来非常简单(〜sockaddr
中的第180行)。它仅在size()
上调用boost/asio/ip/basic_endpoint.hpp
,表示实例协议的基础本机端点类型。有趣的是,sizeof
方法似乎几乎没有没有,除非在请求的大小大于底层typedef
结构的大小时抛出异常({{1是一个包含resize()
或sockaddr_storage
)足够存储空间的结构。它可能存在以供将来在Asio中使用或适应未来的协议,因为sockaddr_storage
是一个模板化的类。我不太确定......
至于为什么你想在日常的Asio编程中使用端点对象的这些方法,我真的不能想到一个原因。
答案 1 :(得分:0)
size()可能映射到sizeof(sockaddr_in)或sizeof(sockaddr_in6)。 Boost.Asio是一个仅限标题的库,因此您可以轻松地检查自己。我不确定调整大小是什么,我从来没用过它。你想用它做什么?