UNIXドメインソケット
Mono.Unix.UnixClient クラスで利用可能。
データを送ることに加えて、プロセスは、sendmsg()およびrecvmsg()システムコールを使用してUNIXドメインソケット接続を経由してファイル記述子を送信することができる。
POSIXはBSDソケットとしてUNIXドメインソケットインタフェースを提供している。BSDソケットのAF_UNIXprotocol familyがUNIXドメインソケットに相当する。受け入れ可能なsocket typeはSOCK_STREAM・SOCK_DGRAM・SOCK_SEQPACKETの3種類である。
Go言語(の実行環境)では、Microsoft Windows上でもUNIXドメインソケットを使ったプログラムを動かすことができる。
特殊なUNIXドメインソケットとして、socketpair()を用いて作られるものがある。socketpair()はUNIXドメインソケットを2点作成し、一方のソケットに書き込んだデータがもう一方のソケットから読み出せる。パイプが一方通行の読み書きしかできないのに対し、socketpair()にて作成したソケットでは双方向通信が可能である。
LinuxにおけるUNIXドメインソケットは、バッファ(メモリ)への書き込みと読み込みという非常にシンプルな仕組みで実装されている。
Linuxカーネルのlinux/net/unix/af_unix.c (GitHub mirror) に実装される。SOCK_STREAMの場合、カーネル内部ではソケットバッファへのメッセージコピー・peerがもつsk_receive_queueのtail、受信側のsk_data_ready呼び出し、を繰り返すことでデータを転送する。
UNIXドメインソケットは単一マシン上のIPCが前提である。ゆえにTCPのようなプロトコルスイートは不要であり、プロトコルの重層が生むデータの入れ子構造を持たない。またネットワークに由来するパケットロスや到達順序保証の対応も必要ないため、バッファのread/writeというシンプルな仕組みで実装されている。結果として高効率なIPCが可能となっている。
URL を unix:// もしくは udg:// で始めることで利用可能。