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.
- Voir également cette double question: stackoverflow.com/questions/6729366/...
Vous devez vous connecter pour publier un commentaire.
Je pense que le Wikipédia notes sur ce résumer assez bien:
Même si quelqu'un est venu avec une raison de la différence aujourd'hui, ils ont à venir avec de nouveaux identifiants ou tellement de choses allait se briser...