AF_INET和PF_INET的细微不同

来源:互联网 发布:国家注册审核员 知乎 编辑:程序博客网 时间:2024/04/30 11:00

AF_INET和PF_INET的细微不同

在写网络程序的时候,建立TCP socket:
sock = socket(PF_INET, SOCK_STREAM, 0);
然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。

相关头文件中的定义:AF = Address Family
PF = Protocol Family
AF_INET = PF_INET

所以在windows中AF_INET与PF_INET完全一样. 而在Unix/Linux系统中,在不同的版本中这两者有微小差别.对于BSD,AF,对于POSIXPF.

理论上建立socket时是指定协议,应该用PF_xxxx设置地址时应该用AF_xxxx。当然AF_INET和PF_INET的值是相同的,混用也不会有太大的问题。

在函数socketpair与socket的domain参数中有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET.这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET. **建议:对于socketpair与socket的domain参数,使用PF_LOCAL系列,而在初始化套接口地址结构时,则使用AF_LOCAL.例如:     z = socket(PF_LOCAL, SOCK_STREAM, 0);     adr_unix.sin_family = AF_LOCAL;

另外:

AF表示ADDRESS FAMILY 地址族 
PF 
表示PROTOCL FAMILY 协议族
但这两个宏定义是一样的
所以使用哪个都没有关系

Winsock2.h
#define AF_INET 0
#define PF_INET AF_INET

所以在windows中AF_INET与PF_INET完全一样

而在Unix/Linux系统中,在不同的版本中这两者有微小差别

对于BSD,AF,对于POSIXPF

在函数socketpair与socket的domain参数中,有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET.这几个参数有
AF_UNIX=AF_LOCAL,
PF_UNIX=PF_LOCAL, 
AF_LOCAL=PF_LOCAL, 
AF_INET=PF_INET.
**建议:对于socketpair与socket的domain参数,使用PF_LOCAL系列,而在初始化套接口地址结构时,则使用AF_LOCAL.例如:    z = socket(PF_LOCAL, SOCK_STREAM, 0);    adr_unix.sin_family = AF_LOCAL;


/usr/include/bits/socket.h /* Protocol families.  */#define PF_UNSPEC       0       /* Unspecified.  */#define PF_LOCAL        1       /* Local to host (pipes and file-domain).  */#define PF_UNIX         PF_LOCAL /* POSIX name for PF_LOCAL.  */#define PF_FILE         PF_LOCAL /* Another non-standard name for PF_LOCAL.  */#define PF_INET         2       /* IP protocol family.  */#define PF_AX25         3       /* Amateur Radio AX.25.  */#define PF_IPX          4       /* Novell Internet Protocol.  */#define PF_APPLETALK    5       /* Appletalk DDP.  */#define PF_NETROM       6       /* Amateur radio NetROM.  */#define PF_BRIDGE       7       /* Multiprotocol bridge.  */#define PF_ATMPVC       8       /* ATM PVCs.  */#define PF_X25          9       /* Reserved for X.25 project.  */#define PF_INET6        10      /* IP version 6.  */#define PF_ROSE         11      /* Amateur Radio X.25 PLP.  */#define PF_DECnet       12      /* Reserved for DECnet project.  */#define PF_NETBEUI      13      /* Reserved for 802.2LLC project.  */#define PF_SECURITY     14      /* Security callback pseudo AF.  */#define PF_KEY          15      /* PF_KEY key management API.  */#define PF_NETLINK      16#define PF_ROUTE        PF_NETLINK /* Alias to emulate 4.4BSD.  */#define PF_PACKET       17      /* Packet family.  */#define PF_ASH          18      /* Ash.  */#define PF_ECONET       19      /* Acorn Econet.  */#define PF_ATMSVC       20      /* ATM SVCs.  */#define PF_RDS          21      /* RDS sockets.  */#define PF_SNA          22      /* Linux SNA Project */#define PF_IRDA         23      /* IRDA sockets.  */#define PF_PPPOX        24      /* PPPoX sockets.  */#define PF_WANPIPE      25      /* Wanpipe API sockets.  */#define PF_LLC          26      /* Linux LLC.  */#define PF_CAN          29      /* Controller Area Network.  */#define PF_TIPC         30      /* TIPC sockets.  */#define PF_BLUETOOTH    31      /* Bluetooth sockets.  */#define PF_IUCV         32      /* IUCV sockets.  */#define PF_RXRPC        33      /* RxRPC sockets.  */#define PF_ISDN         34      /* mISDN sockets.  */#define PF_PHONET       35      /* Phonet sockets.  */#define PF_IEEE802154   36      /* IEEE 802.15.4 sockets.  */#define PF_CAIF         37      /* CAIF sockets.  */#define PF_ALG          38      /* Algorithm sockets.  */#define PF_MAX          39      /* For now..  *//*       *   Protocol   families,   same   as   address   families   for   now.   PF=AF    */ /* Address families.  */#define AF_UNSPEC       PF_UNSPEC#define AF_LOCAL        PF_LOCAL#define AF_UNIX         PF_UNIX#define AF_FILE         PF_FILE#define AF_INET         PF_INET#define AF_AX25         PF_AX25#define AF_IPX          PF_IPX#define AF_APPLETALK    PF_APPLETALK#define AF_NETROM       PF_NETROM#define AF_BRIDGE       PF_BRIDGE#define AF_ATMPVC       PF_ATMPVC#define AF_X25          PF_X25#define AF_INET6        PF_INET6#define AF_ROSE         PF_ROSE#define AF_DECnet       PF_DECnet#define AF_NETBEUI      PF_NETBEUI#define AF_SECURITY     PF_SECURITY#define AF_KEY          PF_KEY#define AF_NETLINK      PF_NETLINK#define AF_ROUTE        PF_ROUTE#define AF_PACKET       PF_PACKET#define AF_ASH          PF_ASH#define AF_ECONET       PF_ECONET#define AF_ATMSVC       PF_ATMSVC#define AF_RDS          PF_RDS#define AF_SNA          PF_SNA#define AF_IRDA         PF_IRDA#define AF_PPPOX        PF_PPPOX#define AF_WANPIPE      PF_WANPIPE#define AF_LLC          PF_LLC#define AF_CAN          PF_CAN#define AF_TIPC         PF_TIPC#define AF_BLUETOOTH    PF_BLUETOOTH#define AF_IUCV         PF_IUCV#define AF_RXRPC        PF_RXRPC#define AF_ISDN         PF_ISDN#define AF_PHONET       PF_PHONET#define AF_IEEE802154   PF_IEEE802154#define AF_CAIF         PF_CAIF#define AF_ALG          PF_ALG#define AF_MAX          PF_MAX



本文地址:http://www.procedurego.com/article/304313.html