私が何を読んでいる間AF_INET
は、別の家族がUNIX domain socket
。これが wiki link です。これについて読みました。
これの意味がわかりません。
Unixドメインソケットは、アドレスネームスペースとしてファイルシステムを使用します。これらは、ファイルシステムのiノードとしてプロセスによって参照されます。これにより、2つのプロセスが通信するために同じソケットを開くことができます。ただし、通信は完全にオペレーティングシステムカーネル内で行われます。
やりたいならSSH or FTP
、私はどの家族を使用していますかAF_INET or AF_UNIX
。私は実際には少し混乱しています。
リモートホストと通信する場合は、おそらくINET
ソケットが必要になります。
違いは、INET
ソケットがIPアドレス-ポートタプルにバインドされているのに対し、UNIX
ソケットはファイルシステム上の特別なファイルに「バインド」されていることです。一般に、同じマシンで実行されているプロセスのみが後者を介して通信できます。
では、なぜUNIX
ソケットを使用するのでしょうか?まさに上記の理由から:同じホスト上のプロセス間の通信であり、ループバックを介したINET
ソケットの軽量な代替手段です。
実際、INET
ソケットは完全なTCP/IPスタックの最上部にあり、トラフィックの輻輳アルゴリズム、バックオフなどを処理します。 UNIX
ソケットは、これらすべての問題に対処する必要はありません。すべてがマシンに対してローカルであるように設計されているため、コードがはるかに単純で、通信が高速です。確かに、負荷が高い場合にのみ違いに気付くでしょう。 Nginxなどの背後でアプリケーションサーバー(Node.js、Tornado ...)をリバースプロキシする場合.
AF_UNIXソケットは、優れたプロセス間通信を提供します。ソケットペアsocketpair(..) "を開き、一時ファイル名にバインドします。ペアの一方に書き込みを行うと、もう一方に到達します。カーネルは、プロトコルまたはファイルシステムのオーバーヘッドなしでメッセージをルーティングします。ブロッキングi/oまたはselect(.. 。)スレッドとプロセスをFIFOの方法で同期します。選択モードとデータグラム(長さを取得できる)モードで非ブロック化が好きですが、独自のモードを選択できます。一時ファイルを必ず削除してください終了時のファイル(ゼロバイトですが、ファイルシステムディレクトリに表示されます)