相关疑难解决方法(0)

AF_INET和PF_INET常量之间有什么区别?

看一下关于套接字编程的例子,我们可以看到有些人在使用AF_INET其他人时使用PF_INET.另外,有时它们都用在同一个例子中.问题是:它们之间有什么区别吗?我们应该使用哪一个?

如果你能回答这个问题,另一个问题就是......为什么有这两个相似(但相等)的常数?


到目前为止,我发现了什么:

socket手册页

在(Unix)套接字编程中,我们有socket()接收以下参数的函数:

int socket(int domain, int type, int protocol);
Run Code Online (Sandbox Code Playgroud)

该联机帮助页说:

所述domain参数指定的通信区域; 这将选择将用于通信的协议族.这些系列在<sys/socket.h>中定义.

并且该手册页引用了该参数AF_INET以及其他一些AF_常量domain.此外,在NOTES同一手册页的部分,我们可以阅读:

4.x BSD下用于协议族的清单常量是PF_UNIX,PF_INET等,而AF_UNIX等用于地址族.但是,BSD手册页已经承诺:"协议族通常与地址族相同",后续标准在任何地方都使用AF_*.

C标头

sys/socket.h实际没有定义这些常量,而是包括bits/socket.h.这个文件定义了大约38个AF_常量和38个PF_常量,如下所示:

#define PF_INET     2   /* IP protocol family.  */
#define AF_INET     PF_INET
Run Code Online (Sandbox Code Playgroud)

蟒蛇

Python的插座模块是非常相似的C API.但是,有许多AF_常量但只有一个PF_常量(PF_PACKET).因此,在Python中我们别无选择,只能使用AF_INET.

我认为这个仅包括AF_常数的决定遵循一个指导原则:"应该有一个 - 最好只有一个 - 明显的方法来做到这一点." (Python的禅宗)

其他信息

此论坛帖子 …

c python unix sockets

30
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

python ×1

sockets ×1

unix ×1