AF_* とPF_*の違いについて
ソケットを使ってプログラムを書くときに
int socket(int domain, int type, int protocol);
の第一引数にAF_INETとPF_INETが使われることがあり、違いが気になったので調べて見た。
linuxのソースコードを確認したところ、
/* 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])
[^1]: JonC.Snader著トップスタジオ訳「TCP/IPプログラミング徹底解説」より
追記
stackorverflowにも同様のことが書いてあるが、
socket()にPF_*、bind()にAF_*を使うべきらしい[^2]
[^2]: ショーン・ウォルトン著 野村純子訳 「Linuxソケットプログラミング」より
結論
基本的には差がないのであまり気にしなくて良さそう
参考ページ
Author And Source
この問題について(AF_* とPF_*の違いについて), 我々は、より多くの情報をここで見つけました https://qiita.com/progrunner/items/bdc37d407514addde1f9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .