[[StartPage]] * Network Programming [#kb352751] ** TCP接続 [#z71e2440] Internet Protocol を用いたデータ交換は通常は TCP接続を用いるのが便利である。 *** Client [#t7788530] Client program は、server に対し接続を試みる。通常の手順は - socket の生成 - address の設定 - connect の発行 という手順を踏む。connect まで正常に行われると、send/recv を使って読み書きを行うことができるようになる。使い終わったら socket を閉じる。 *** Server [#a9698d41] Server program の手順の概略は - socket の生成 - 受け付け address の設定(bind) - listen の発行 - 接続受付(accept) である。受け付け用の socket と accept された時点で生成される通信用の socket の二つの socket が使われることに注意する。 *** address の設定 [#p1f78e2d] Internet address の文字表現と(network libraryでの)内部表現の変換が必要になる。これには - getaddrinfo を用いる。この関数が受け付ける internet address の文字表現は、数値表現(IPv4 の dotted-decimal 表現か IPv6 の hexadecimal 表現)でもよいし、host 名でもよい。 getaddrinfo は構造体を確保して、その address を返す。確保された構造体は呼び出した側が - freeaddrinfo 関数を用いて解放しなければならない。 従来は、inet_addr 関数と gethostbyname が用いられていたが、IPv4 のみしか使えないこと、また gethostbyname は thread safe ではない(この関数の仕様から thread safe にできない)ことから上記方法に変更されている。