【发布时间】:2012-04-23 10:02:15
【问题描述】:
Linux 提供的头文件“/usr/include/linux/socket.h”包含支持的地址族和协议族的定义:
/* Supported address families. */
#define AF_UNSPEC 0
....
/* Protocol families, same as address families. */
#define PF_UNSPEC AF_UNSPEC
...
但是为什么它没有定义套接字类型呢?
我可以在“/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,
};
不知道为什么Linux提供的头文件中没有定义这些?
【问题讨论】:
-
你怎么只编译 gcc filename.c 不够
-
我是直接调用Linux系统调用。我注意到 SOCK_DGRAM 没有在 Linux 提供的头文件中定义。想知道为什么它没有在Linux头文件中定义。
-
正如 Alnitak 所说,通过 POSIX,标头是
并且如果您 #include您将可以访问正确的定义。不要只是查找它们并使用数字。 -
没错。宏名称可能与 POSIX 定义的宏相同,也可能不同。但是,这些套接字类型的数字应该在 Linux 附带的任何头文件中定义。不是吗?
-
如果你查看“/usr/src/kernels/
/include/linux/net.h”文件,你会看到 SOCK_DGRAM 等的定义。我想知道为什么会这样没有在 Linux 附带的头文件中定义?