tarosukeの日記: [talos]ソケット
日記 by
tarosuke
今はNETPROTOの中にごたまぜになっているが、登録する対象のプロトコルごとのサブクラスを作れば今みたいに「やろうと思えば何でも繋がってしまう」状況を避けられるかも知れない。例えばEtherNetの上のプロトコルだったらETHERPROTOから導出して構築子の引数はプロトコル番号(IP4なら「IP4 : public ETHERPROTO」で引数は0x800)とか、UDPなら「UDP : public IPPROTO」で引数はuchar型で17だとか。
この場合の問題は例えばIP/ATMしたい時には「IP4 : public ATM」ができないので「ATMIP4 : public ATM」とかにしなければならない点。そもそも例えばIP4に何か受信させるときにはプロトコル番号とIPアドレスの両方をマッチングさせたりしているわけで、今みたいにNICそれぞれに専属のIP4インスタンスを作らずにIPv4レイヤを作った上でIP4をIPv4レイヤに...それをすると送信時にいちいち送信先を探さなきゃならんので困るんだ。
あるいはプロトコルを増やしたらそれを登録する先もいじらなきゃならないというメンテナンス性の悪化を許容すれば話はもっと簡単になる。要は各種プロトコル毎にRegisterメソッドを作ってしまえばいい。登録する先に該当プロトコルのRegisterがなければコンパイル時に検出できるからこのくらいは許容できる...かな? 処理は「プロトコル毎のキューに投入する」と、ほとんど同じだからテンプレートを使って生成したいような気もするけどな。
[talos]ソケット More ログイン