Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/19:5/5
2024/05/18:20/24

2024/03/20より398/1409
人気モジュール
No.1: フォーラム 5
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット5

No.1:どっかの巡回ロボット4
No.2:Baidu巡回ロボット1

日曜日からの合計
メイン
   Scenario Setup & Configuration
     クロスレイヤ処理に関する過去ログについて
投稿するにはまず登録を

題名 投稿者 日時
   クロスレイヤ処理に関する過去ログについて beginner 2012/7/8 18:33
   » Re: クロスレイヤ処理に関する過去ログについて hiro 2012/7/22 14:26
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
hiro
投稿日時: 2012/7/22 14:26
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: クロスレイヤ処理に関する過去ログについて
放置されていたようですが、解決しましたか?

まず、message(というかヘッダ)の構造を把握する必要があります。
QualNet Hacksの第2章 イベント処理が参考になりますよ。
http://simweb.kke.co.jp/download/QualNetHacks-02-Event.pdf

で、概要箇所の上の方で、
MESSAGE_RemoveHeader (node, msg, sizeof(struct ipovly), TRACE_TCP);
して、
memcpy (MESSAGE_ReturnPacket(msg), &ti->ti_t, sizeof (struct tcphdr));
してますよね。
そして、問題の個所が以下の部分。
msg->transport_hdr = MESSAGE_ReturnPacket(msg);
これらを見れば自明ですが、
ti->ti_tから、sizeof (struct tcphdr)だけmemcpyされているわけです。
部分的に書き直せば、

{
	struct tcphdr *transport_hdr;
	transport_hdr = (struct tcphdr *)MESSAGE_ReturnPacket(msg);
	msg->transport_hdr = transport_hdr;
}


となります。これならわかりますよね。

> ※MESSAGE_ReturnPacket(msg) について実際に出力させて
> 確かめようとも思ったのですが、返り値が代入されている
> msg->transport_hdr が void 型で定義されていたため、
> どのように確かめればよいか分かりませんでした。

ほとんどの場合void *の定義は『いろんなもの』を示す場所になるので、
そこに何が入っているのかは、入れた場所で特定するしかありません。
例えばmallocもvoid *ですよね。
慣れるまでは難しい概念かもしれませんけど、じっくりとソースコードを
読めば答えは必ず見つかります。頑張って下さい。
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT