AF_INETとPF_INETの微妙な違い


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、POSIXについてはPFである.
理論的に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プロトコル族を表すがこの2つのマクロ定義は同じなのでどちらを使っても構わない
Winsock2.h中#define AF_INET 0 #define PF_INET AF_INET
だからwindowsでAF_INETとPF_INETは全く同じです
Unix/Linuxシステムでは、バージョンによってわずかな違いがあります.
BSDの場合はAF、POSIXの場合はPF
 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