学校 / 2006/12/11 (Mon) / 編集 |
今日は実験があった
動かなくて困っていたサンプルプログラムは結局先生の記述ミス
手直ししたらちゃんと動いた
これで課題が終わる!!と思いきや
プログラムの修正ができなかった……
動かなくて困っていたサンプルプログラムは結局先生の記述ミス
手直ししたらちゃんと動いた
これで課題が終わる!!と思いきや
プログラムの修正ができなかった……
課題はIPv4用に作られたCプログラムをIPv6でも動くようにするというもの
IPv4専用なsockaddr_inなどの関数をIPv6用のsockaddr_in6などに変えたり
アドレス格納用の変数をもっと大きな配列に変えたり
そんな感じで動く予定だったんだが……
どうみたってポート番号の代入がミスってる
問題はIPv4用の構造体
上記をよく見るとわかるが、servent構造体で定義されているポート番号がaddrinfo構造体では定義されていない
つまりどうにかして標準入力で指定したアドレスをsocketが認識できる形式にへんかんしなければならない
ちなみに先輩のコードではserventを使っているわけだが
それでいいのかな?
なんか駄目な気もするけど
時間なかったら先輩のパクろうかな
OSも全然終わってないしね………
とかいいながら『GOSICK』 読んでたりする
今日は帰りに4件も本屋まわったのにどこにも置いてなかった
やっぱ沖縄ではまだ入荷してないのかな?
はやく6巻読みてぇ〜〜〜
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巻読みてぇ〜〜〜
PR