为什么 <linux/socket.h> 文件没有定义套接字类型?

Dew*_*mar 2 c sockets

Linux 提供的头文件“/usr/include/linux/socket.h”包含支持的地址族和协议族的定义:

/* Supported address families. */
#define AF_UNSPEC       0
....

/* Protocol families, same as address families. */
#define PF_UNSPEC       AF_UNSPEC
...
Run Code Online (Sandbox Code Playgroud)

但是为什么不定义套接字类型呢?

我可以在“/usr/include/bits/socket.h”中找到它的定义

enum sock_type {
    SOCK_DGRAM  = 1,
    SOCK_STREAM = 2,
    SOCK_RAW    = 3,
    SOCK_RDM    = 4,
    SOCK_SEQPACKET  = 5,
    SOCK_DCCP   = 6,
    SOCK_PACKET = 10,
};
Run Code Online (Sandbox Code Playgroud)

我想知道为什么Linux提供的头文件中没有定义这些?

Aln*_*tak 5

用户空间程序应该使用:

#include <sys/socket.h>
Run Code Online (Sandbox Code Playgroud)

注意:sys不是linux

这将然后#include适当的低级头文件。

事实上,一些定义是在<bits/socket.h>和一些<linux/socket.h>仅仅是一个实现细节。