課題3


課題3
サンプルプログラム(2)のクライアント(tcpc2.c)とサーバ(tcps2.c)をアドレスファミリ独立となるように書き換えよ。(ヒント:下記参照)
このプログラムは、以下のようにIPv4に依存した部分が幾つもハードコーディングされている。
sockaddr_inが使われている。
hbufがIPv4アドレスの最大文字数長分(INET_ADDRSTRLEN)になっている。
gethostbynameが使われている。
socket関数がハードコーディングされたAF_INETを使っている。
socket関数がSOCK_STREAMにIPPROTO_TCPをハードコーディングしている。
inet_ntopがハードコーディングされたAF_INETと一緒に使われている。
以上の点に注意して、アドレスファミリ独立のプログラムに書き換えること。

書き換えたプログラム
tcpc2c.c
tcps2s.c

tcps2.cの変更点

「INET_ADDRSTRLEN」を「INET6_ADDRSTRLEN」に変更
「sockaddr_in6」 変更にともなうメンバを変更
「sockaddr_in」を「sockaddr_in6」に変更
「AF_INET」を「AF_INET6」に変更

tcpc2.cの変更点

「gethostbyname()」や「getservbyname()」を「getaddrinfo()」に変更
「INET_ADDRSTRLEN」を「INET6_ADDRSTRLEN」に変更
「sockaddr_in6」変更にともなうメンバを変更
「inet_ntop()」を「getnameinfo()」に変更
「sockaddr_in」を「sockaddr_in6」に変更
「AF_INET」を「AF_INET6」に変更