I found in Linux kernel source code that PF_INET and AF_INET are the same. The following code is from file include/linux/socket.h, line 204 of Linux kernel 3.2.21 tree.
/* Protocol families, same as address families. */
...
#define PF_INET AF_INET
Checking the header file solve's the problem. One can check for there system compiler.
For my system , AF_INET == PF_INET
AF == Address Family And PF == Protocol Family
Protocol families, same as address families.
In fact, AF_ and PF_ are the same thing. There are some words on Wikipedia will clear your confusion
The original design concept of the socket interface distinguished between protocol types (families) and the specific address types that each may use. It was envisioned that a protocol family may have several address types. Address types were defined by additional symbolic constants, using the prefix AF_ instead of PF_. The AF_-identifiers are intended for all data structures that specifically deal with the address type and not the protocol family. However, this concept of separation of protocol and address type has not found implementation support and the AF_-constants were simply defined by the corresponding protocol identifier, rendering the distinction between AF_ versus PF_ constants a technical argument of no significant practical consequence. Indeed, much confusion exists in the proper usage of both forms.
There are situations where it matters.
If you pass AF_INET to socket()
in Cygwin, your socket may or may not be randomly reset. Passing PF_INET ensures that the connection works right.
Cygwin is self-admittedly a huge mess for socket programming, but it is a real world case where AF_INET and PF_INET are not identical.
Meaning, AF_INET
refers to addresses from the internet, IP addresses specifically. PF_INET
refers to anything in the protocol, usually sockets/ports.
Consider reading the man pages for socket(2) and bind(2). For the sin_addr
field, just do something like the following to set it:
struct sockaddr_in addr;
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
AF_INET = Address Format, Internet = IP Addresses
PF_INET = Packet Format, Internet = IP, TCP/IP or UDP/IP
AF_INET is the address family that is used for the socket you're creating (in this case an Internet Protocol address). The Linux kernel, for example, supports 29 other address families such as UNIX sockets and IPX, and also communications with IRDA and Bluetooth (AF_IRDA and AF_BLUETOOTH, but it is doubtful you'll use these at such a low level).
For the most part sticking with AF_INET for socket programming over a network is the safest option.
Meaning, AF_INET refers to addresses from the internet, IP addresses specifically.
PF_INET refers to anything in the protocol, usually sockets/ports.
Source: Stackoverflow.com