Quelle est la différence entre AF_INET et PF_INET constantes?

En regardant des exemples de programmation socket, nous pouvons voir que certaines personnes utilisent AF_INET tandis que d'autres utilisent PF_INET. En plus, parfois,deux d'entre eux sont utilisés sur le même exemple. La question est: quelle Est la différence entre eux? Lequel doit-on utiliser?

Si vous pouvez répondre à cette question, une autre question... Pourquoi il y a ces deux semblables (mais égaux) constantes?


Ce que j'ai découvert, jusqu'à présent:

La socket page de manuel

Dans (Unix) programmation socket, nous avons le socket() fonction qui reçoit les paramètres suivants:

int socket(int domain, int type, int protocol);

La page de manuel dit:

La domain argument spécifie une communication de domaine; ceci sélectionne la
la famille de protocole qui sera utilisé pour la communication. Ces familles
sont définis dans le <sys/socket.h>.

Et la page de manuel de la cites AF_INET ainsi que quelques autres AF_ des constantes pour les domain paramètre. Aussi, à la NOTES section de la même page de manuel, on peut lire:

Le manifeste constantes utilisées moins de 4 ans.x de BSD pour les familles de protocoles sont
PF_UNIX, PF_INET, etc., alors que AF_UNIX etc. sont utilisés pour les familles d'adresses.
Cependant, déjà BSD page de man de promesses: "La famille de protocole
est généralement la même que l'adresse de la famille", et après les normes
utilisation AF_* partout.

Le C-têtes

La sys/socket.h ne définissent pas vraiment ces constantes, mais au lieu de cela comprend bits/socket.h. Ce fichier définit autour de 38 AF_ constantes et 38 PF_ constantes comme ceci:

#define PF_INET     2   /* IP protocol family.  */
#define AF_INET     PF_INET

Python

La Python module socket est très similaire à l'API C. Cependant, il existe de nombreux AF_ constantes, mais un seul PF_ constante (PF_PACKET). Ainsi, en Python, nous n'avons pas le choix, mais l'utilisation AF_INET.

Je pense que cette décision d'inclure seulement les AF_ constantes suit l'un des principes directeurs: "Il devrait y avoir un, et de préférence seulement une façon évidente de le faire." (Le Zen de Python)

Autres informations

Ce post sur le forum des liens vers ce vieux message, qui contient quelques informations historiques.