パイプだけでなくソケットにもsplice()/tee()を使用できますか?

パイプだけでなくソケットにもsplice()/tee()を使用できますか?

Linuxでは、システムコールsplice(2)とtee(2)を使用して2つのファイル記述子間でデータを転送します。文書によると、ファイル記述子の一方または両方がパイプでなければなりません。なぜ?ソケットと一緒に使用できますか?現在動作していますか?それともカーネルを修正する必要がありますか?

答え1

パイプバッファ(Linuxの場合)は異なる動物であり、カーネルネットワーキングを引き付けます。これをAF_LOCALソケットに制限すると、実装が簡素化されますが、検証が複雑になり、匿名ファイルバッファではなくネットワークバッファ管理サブシステムを介して割り当てとマッピングを処理する必要があります。

関連情報