忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/23 (Sat) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2006/12/11 (Mon) / 編集
今日は実験があった
動かなくて困っていたサンプルプログラムは結局先生の記述ミス
手直ししたらちゃんと動いた
これで課題が終わる!!と思いきや

プログラムの修正ができなかった……

課題はIPv4用に作られたCプログラムをIPv6でも動くようにするというもの
IPv4専用なsockaddr_inなどの関数をIPv6用のsockaddr_in6などに変えたり
アドレス格納用の変数をもっと大きな配列に変えたり
そんな感じで動く予定だったんだが……
ーーーーーーーーーーーーーー
%./client6 yusuke.local 4567
trying 1002:11d7:c0a8:119:: port 64307
connect: No route to host
ーーーーーーーーーーーーーー
いくら俺でもわかる
どうみたってポート番号の代入がミスってる
問題はIPv4用の構造体
ーーーーーーーーーーーーーーーーーーーーーー
struct  hostent {
	char    *h_name;        /* ホスト名 */
	char    **h_aliases;    /* エイリアスのリスト */
	int     h_addrtype;     /* ホストアドレスの種類*/
	int     h_length;       /* アドレスの長さ */
	char    **h_addr_list;  /* ネームサーバから取得したアドレスのリスト */
};

struct  servent {
	char    *s_name;        /* サービス名 */
	char    **s_aliases;    /* エイリアスのリスト */
	int     s_port;         /* ポート番号 */
	char    *s_proto;       /* プロトコル */
};
ーーーーーーーーーーーーーーーーーーーーーーー
を、IPv6用の構造体
ーーーーーーーーーーーーーーーーーーーーーー
struct addrinfo {
	int ai_flags;           /* 入力フラグ */
	int ai_family;          /* プロトコルファミリー */
	int ai_socktype;        /* ソケットタイプ */
	int ai_protocol;        /* プロトコル */
	socklen_t ai_addrlen;   /* アドレスの長さ */
	struct sockaddr *ai_addr; /* アドレス */
	char *ai_canonname;     /* サービスロケーション用の正規の名前*/
	struct addrinfo *ai_next; /* リストの次の項目へのポインタ */
 };
ーーーーーーーーーーーーーーーーーーーーーーー
にかえた当たりにあるわけだ
上記をよく見るとわかるが、servent構造体で定義されているポート番号がaddrinfo構造体では定義されていない
つまりどうにかして標準入力で指定したアドレスをsocketが認識できる形式にへんかんしなければならない
ちなみに先輩のコードではserventを使っているわけだが
それでいいのかな?
なんか駄目な気もするけど
時間なかったら先輩のパクろうかな
OSも全然終わってないしね………

とかいいながら『GOSICK』 読んでたりする
今日は帰りに4件も本屋まわったのにどこにも置いてなかった
やっぱ沖縄ではまだ入荷してないのかな?
はやく6巻読みてぇ〜〜〜

拍手[0回]

PR
忍者ブログ [PR]