【ゆにっくすどめいんそけっと】

UNIXドメインソケット とは?

最終更新:
💡 同じホスト内のプログラムをつなぐ通信の口

同じホスト内のプロセス同士がデータをやり取りするためのソケット方式。ファイルシステム上のパスで名前を付ける方式のほか、名前を持たないものやLinuxの抽象アドレスもある。

📌 このページのポイント
ホスト内のプロセス間通信 同じホスト 受付プロセス 計算プロセス socket socket 要求 結果 OS内でデータを受け渡す パス名付きの場合の入口 /tmp/example.sock 通常のデータファイルではない 名前なしのソケットもある Linuxには抽象アドレスもある
両プロセスのソケットを通じて要求と結果をやり取りする構成例。パス名は相手を指定する入口で、すべてのソケットがパスを持つわけではない。
ひよこ ひよこ
UNIXドメインソケットって何?
ペンギン先生 ペンギン先生
同じホスト内のプロセス同士がデータをやり取りするためのソケットだよ。例えば、同じサーバー上の受付処理と計算処理を別のプロセスにして、要求と結果を受け渡す構成で使えるんだ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
UNIXドメインのアドレスを使うよ。よくあるのは、/tmp/example.sockのようなファイルシステム上のパスで相手を指定する方式。ただし、すべてのUNIXドメインソケットがパスを持つわけではないんだ。
ひよこ ひよこ
ほかにどんな指定があるの?
ペンギン先生 ペンギン先生
socketpairで作る名前なしのソケットなどがあるよ。Linuxには、ファイルシステムに依存しない抽象アドレスもある。抽象アドレスはLinux固有の拡張なので、他のOSでも使えるとは限らないんだ。
ひよこ ひよこ
ソケットのファイルにデータを書き込むの?
ペンギン先生 ペンギン先生
普通のファイルへ内容を保存するのとは違うよ。パス名付きの場合、その場所のソケットファイルは通信相手を見つける入口になる。接続後はソケットを通じて送受信するんだ。
ひよこ ひよこ
ローカル通信なら必ず速くて安全?
ペンギン先生 ペンギン先生
一律には言えないよ。速度は処理やデータ量などで変わる。Linuxのパス名付きソケットではディレクトリやソケットの権限が関係するけれど、抽象アドレスには同じファイル権限の仕組みはない。使う方式とOSに合わせて接続を制御しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「UNIXドメインソケット」って出てきたら「同じホスト内のプログラム同士をつなぐ通信の口」と思えばだいたいOK!
📖 おまけ:英語の意味
「UNIX Domain Socket」 = UNIXドメインのソケット
💬 ここでのdomainはソケットの通信範囲やアドレス方式の区分だよ。UNIXドメインは同じホスト内の通信に使い、LinuxではAF_UNIXやAF_LOCALという名前で指定するんだ。

参考資料

← 用語集にもどる