Re: lengthのながさ
In article <3992789news.pl@rananim.ie.u-ryukyu.ac.jp>,
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 河野真治 @ 琉球大学情報工学です。
>
> In article <squbquyoujs.fsf@stellar.co.jp>, manmos@stellar.co.jp (Hideo "Sir MaNMOS" Morishita) writes
> > データや、通信のプロトコルなどで、レーコド数やオクテット数をそのデータ
> > 内に含めることは少なくないわけですが、その数値自体を含めたヘッダ長など
> > も、それに含めるかどうかは別れてくると思うのです。
>
> 最初は「ヘッダーも含める」派だったんですが、最近、ちょっと
> 態度が変わりました。
>
> ヘッダは大体固定長ですよね。可変になるのはデータ部分。これを
> 可変長文字列で受けるとすると、
> read header size
> で、ヘッダから length を取得
> length 分の可変長文字列を用意
> read body
> ってことになると思います。
例えばIPv4はヘッダが可変長ですよね。v6はヘッダがチェーンになってるけど。
こういう場合は明らかにヘッダ長を含めた方が楽なんですよね。とくにIPだと
streamみたいに、「切れ目」がわからないのでヘッダを読んでから、ボディを
読むっていう行為は必要がないのも大きい。
どうも、私はUDP(または生ipとかether packet)/SCTP系のプロトコルを扱うこ
とが少なくないので、データ全体を確保して、ポインタをずらすだけ、って話
が多いから「ヘッダ長はlength に含む」が楽なのかも知れないと、元ネタを
ポストしてから思いました。
#ただ、SCTPはLinuxとSolaris/MacOS-Xでプログラミングスタイルがまだ一定
#してないんで書きにくい。
>
> ま、計算すれば良いだけなんで別に良いんですけどね。前は、
>
> header の最初に全体のパケット長を入れて、
> とりあえず、4byte 読んで長さを見る
> 全体を読み込んで、データ部分をコピーまたは
> データ部分へのポインタと長さを渡す
>
> ってやってたんだけど、それだと、パケットのfreeが面倒。
>
ああ、そういう場面の場合はmallocじゃなくてallocaを使うことが多いです。
私はjavaやらないからなぁ。
> あと、Java だと部分文字列へのポインタみたいなのを真似しようと
> すると面倒だし。
assembler/c出身者からポインタを取り上げたら、何も残りません。きっと。
ちなみにbasicでプログラムを書いている時も、文字列のアドレスを直にとっ
てきて文字列を変更したり、文字列に機械語を仕込んで、そこにcallをかけた
り。
> なので、
>
> > 最近、外からもらう仕様は、それらのデータが含まれていない。というか、
> > 「仕様書に、どういう数値か書いてないんですけど、headerとtrailerを含め
> > ますか?」って聞いたら「普通、入れないでしょう。」見たいなことをいわれ
> > るんです。
>
> と言うことになっているんじゃないでしょうか。
まあ、この仕様書の場合は、そんなことは全然関係なかったんですけどね。
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735