2017-06-01 7 views
1

私は最近、Linuxソケットプログラミングを研究していましたが、そのコンセプトはまだ渦巻いており、私の頭の中で不安定です。誰かが、socket()socketpair()への引数domainの理解を確認したり修正したりすることができますか?ソケット通信が厳密に同じコンピュータ内にあることを希望する場合はPF_LOCAL(またはPF_UNIX)を選択し、ソケット通信の場合はPF_INETを選択します。別のコンピュータの間にいる - 正しいのですか?socket()とsocketpair()のドメイン引数

答えて

1

いいえ、使用する通信ドメインです。 socketについては、man pageを参照してください。たとえば、AF_INETはv4インターネットプロトコルを意味し、AF_INET6はv6インターネットプロトコルを意味し、AF_APPLETALKはAppleTalkを意味します。ほとんど確実にAF_INETまたはAF_INET6が必要です。

あなたが通信する他のプログラムが同じマシンにあるかどうかは、インターネットプロトコルを使用してローカルホストとうまくやりとりすることができるため、本当に関連していないかどうか。

ただし、インターネットドメインプロトコルの使用に伴うパフォーマンスの低下はわずかです。アプリケーションがのみと同じマシン上の他のアプリケーションと接続する場合は、AF_LOCAL/AF_UNIXドメインを使用する方が高速で、ソケット上のファイルレベルのセキュリティ制御などのいくつかの追加の利点があります。あなたがそのルートに行くならば、それを変更せずに異なるコンピュータ間であなたのコードを使用することができないことにちょうど注意してください。

この選択肢の長所と短所については、hereを参照してください。

+0

この場合、 'PF_LOCAL'ドメインの目的は何ですか?いつ使用するべきですか? (私の読書資料は 'socket()'の引数として 'PF_ *'を選び、 'struct sockaddr_ *'ファミリに割り当てられた値として 'AF_ *'を選ぶと言っています) - しかし、私は 'PF_ *'現在一般的に 'AF_ * 'に等しい。 – StoneThrow

+0

@StoneThrowこれを参照してくださいhttps://stackoverflow.com/questions/22288206/unix-sockets-af-local-vs-af-inet –

+0

私はあなたが効果的に地元の通信は、 PF_LOCAL'または 'PF_INET'を使用しますが、後者を使用するとパフォーマンスが低下し、非ローカル通信は' PF_INET'を使用して行う必要があります - そうですか?それは私の質問では、申し訳ありませんが、私は可能な限り明確に表現していないことを意味したものです。 – StoneThrow

関連する問題