Qia*_*ian 4 c standards posix header-files
根据手册页getaddrinfo(3)
,我需要
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
Run Code Online (Sandbox Code Playgroud)
使用该功能getaddrinfo
.或者,根据标准:
#include <sys/socket.h>
#include <netdb.h>
Run Code Online (Sandbox Code Playgroud)
我明白我需要的东西像AF_INET
和SOCK_STEAM
从<sys/socket.h>
.但我仍然有以下问题.
假设我只使用该getaddrinfo
功能,我是否#include <sys/socket.h>
必须符合标准?如果是这样,为什么不<netdb.h>
包括它呢?如果没有,为什么手册页会在概要中包含它?
您需要能够以getaddrinfo
有意义的方式调用的唯一标头是netdb.h
.一个示例用例是循环结果并调用getnameinfo
每个结果,NI_NUMERICHOST
以便打印主机名解析的数字地址.这不需要任何接口netdb.h
.
但是,如果要将查询限制为特定的地址族,则需要定义地址族常量(sys/socket.h
)的标头.您通常还希望使用结果来制作合适的套接字和打开的连接,这也是需要的sys/socket.h
.据推测,这个标题包含在规范中的原因是它需要访问所有(不仅仅是一些)功能getaddrinfo
提供.
至于sys/types.h
,我认为这只是Linux手册页中的瑕疵.通常sys/types.h
不应该使用,除非您处于只需要类型定义而不需要引入宏常量和函数原型的情况.