ソケットを使ってプログラムを書くときに
int socket(int domain, int type, int protocol);
の第一引数にAF_INETとPF_INETが使われることがあり、違いが気になったので調べて見た。
linuxのソースコードを確認したところ、
/include/linux/socket.h(v4.16.2)
/* Protocol families, same as address families. */
# define PF_UNSPEC AF_UNSPEC
# define PF_UNIX AF_UNIX
# define PF_LOCAL AF_LOCAL
# define PF_INET AF_INET
~~~以下略~~~
という記述があったので、linuxにおいてはどちらも変わらなそう
ただ、同ファイルでのsockaddr構造体の定義を見ると
struct sockaddr {
sa_family_t sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
となっていたので、AF_*を使うのが無難そう
(PF_*を支持する理由としては、現在では廃止された古いバージョンのBSDでのsocketコールの継承性等があるそう1)
追記
stackorverflowにも同様のことが書いてあるが、
socket()にPF_*、bind()にAF_*を使うべきらしい2
結論
基本的には差がないのであまり気にしなくて良さそう
参考ページ
Linuxソースコード
Man Page of Socket
stackorverflowの解説