De hecho, AF_ y PF_ son lo mismo. Hay algunas palabras en Wikipedia que aclararán tu confusión
El concepto de diseño original de la interfaz de socket distinguía entre tipos de protocolo (familias) y los tipos de dirección específicos que cada uno podía usar. Se imaginó que una familia de protocolos puede tener varios tipos de direcciones. Los tipos de direcciones se definieron mediante constantes simbólicas adicionales, utilizando el prefijo AF_ en lugar de PF_. Los identificadores AF_ están destinados a todas las estructuras de datos que se ocupan específicamente del tipo de dirección y no de la familia de protocolos. Sin embargo, este concepto de separación de protocolo y tipo de dirección no ha encontrado soporte de implementación y las constantes AF_ simplemente se definieron por el identificador de protocolo correspondiente, lo que hace que la distinción entre constantes AF_ y PF_ sea un argumento técnico sin consecuencias prácticas significativas. De hecho, existe mucha confusión en el uso correcto de ambas formas.
Encontré en el código fuente del kernel de Linux que PF_INET y AF_INET son lo mismo. El siguiente código es del archivo include/linux/socket.h , línea 204 del árbol Linux kernel 3.2.21.
/* Protocol families, same as address families. */
...
#define PF_INET AF_INET
La famosa guía de programación de redes de Beej da una buena explicación:
En alguna documentación, verá la mención de un "PF_INET" místico. Esta es una extraña bestia etérea que rara vez se ve en la naturaleza, pero también podría aclararlo un poco aquí. Una vez, hace mucho tiempo, se pensó que tal vez una familia de direcciones (lo que significa "AF" en "AF_INET") podría admitir varios protocolos a los que hacía referencia su familia de protocolos (lo que significa "PF" en "PF_INET").
Eso no sucedió. Oh bien. Entonces, lo correcto es usar AF_INET en su estructura sockaddr_in y PF_INET en su llamada a socket(). Pero en la práctica, puede usar AF_INET en todas partes. Y, dado que eso es lo que W. Richard Stevens hace en su libro, eso es lo que haré aquí.
- AF =Dirección de la familia
- PF =Familia de protocolos
Significado, AF_INET
se refiere a direcciones de Internet, direcciones IP específicamente. PF_INET
se refiere a cualquier cosa en el protocolo, generalmente sockets/puertos.
Considere leer las páginas man para socket(2) y bind(2). Para el sin_addr
campo, simplemente haga algo como lo siguiente para configurarlo:
struct sockaddr_in addr;
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);