| 学校 / 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
