ちょっと裏側を解説

閑話休題.ネットワークの話に戻ろう.基本的には,/net/tcp/*/ctlがコントロール用のファイル,/net/tcp/*/dataがデータ通信用のファイルになる./net/tcp/*以下を見ると,ctlとdata以外にも次のようなファイルが存在することがわかる.

%cpu ls /net/tcp/5
/net/tcp/5/ctl
/net/tcp/5/data
/net/tcp/5/err
/net/tcp/5/listen
/net/tcp/5/local
/net/tcp/5/remote
/net/tcp/5/status

そして,新たにコネクションを張るために,cloneファイルと呼ばれるファイルが存在する*1TCPの場合は,/net/tcp/cloneがそれである./net/tcp/cloneをopenすると,新たなインタフェースが割り当てられ,そのctlファイルのファイル記述子が返される.つまり,先の"cat > /net/tcp/clone"は,/net/tcp/*/ctlへリダイレクトされる.そして,connectメッセージにより,コネクションが確立し,/net/tcp/*/dataを介して,データのやり取りが可能になる.

また,今回の例はIPアドレスを直に指定したが,名前引きは/dev/dnsへのread/writeで行なう.

*1:UNIXの疑似端末のクローンデバイスに考えは近いのかな.