LnpB | /** |
*「Linuxネットワークプログラミングバイブル」サポートページ | |
*/ |
C言語とLinuxを使った、ネットワークプログラミングのすべてを学べる解説書です。
小俣氏の前著『C for Linux2 超実践Linuxネットワークプログラミング』を大幅に刷新し、
IPv6に対応し、新しい環境での実行例や便利なライブラリの紹介などを新たに盛り込みました。
本書では、多重化・エラー処理などの必須の実装から、
IPv4/IPv6デュアルスタック・RAWソケット・SSLなど定番のテクニックを学べます。
また、実際にプログラムを作って動かすことで理解を深めることに重点をおき、C言語によるサンプルを多数収録。
高性能で信頼性が高いシステムが構築できるようになります。
2.3.1 リンク・レイヤ
2.3.2 インターネット・レイヤ
2.3.3 トランスポート・レイヤ
2.4.1 tcpdumpによるパケット解析
2.4.2 パケットのデータ解析
2.4.3 GUIでパケットのデータ解析
3.3.1 sockaddr型構造体
3.3.2 addrinfo型構造体
3.6.1 シグナルと再起動
3.6.2 サーバプログラムへの応用
3.7.1 正常終了
3.7.2 シグナルの無視
4.3.1 sockaddr型構造体
4.3.2 addrinfo型構造体
4.3.3 hostent型構造体
5.5.1 select()を使用したマルチクライアント化
5.5.2 poll()を使用した多重化
5.5.3 EPOLLを使用した多重化
5.6.1 マルチプロセスによる多重化
5.6.2 マルチスレッドによる並列処理
5.7.1 マルチプロセスでの実現
5.7.2 マルチスレッドでの実現
5.8.1 スレッド間のデータ受け渡し
5.8.2 キューイング
5.11.1 select()による多重化
5.11.2 poll()による多重化
5.11.3 ノンブロッキングI/Oによる多重化
5.11.4 マルチプロセスによる並列処理
5.11.5 マルチスレッドによる多重化
6.4.1 受信プログラム
6.4.2 送信プログラム
9.10.1 サーバプログラム
9.10.2 クライアントプログラム
9.11.1 サーバプログラム
9.11.2 クライアントプログラム
10.2.1 tcphdr型構造体
10.2.2 udphdr型構造体
10.2.3 ip型構造体
10.2.4 ip6_hdr型構造体
10.2.5 ether_header型構造体
10.4.1 クライアントプログラム
10.4.2 サーバプログラム
11.3.1 前準備
11.3.2 ルートCAの構築
11.3.3 ルートCA証明書の内容の確認
11.4.1 秘密鍵の作成
11.4.2 パスフレーズなしの秘密鍵の作成
11.4.3 証明書署名要求書の作成
11.4.4 ルートCAによる署名
11.5.1 秘密鍵の作成
11.5.2 証明書署名要求書の作成
11.5.3 ルートCAによる署名
11.5.4 PKCS12形式への変換
11.6.1 CA証明書一覧ファイルの作成
11.6.2 CA証明書一覧ディレクトリの作成
11.9.1 DHパラメータを含むファイルの作成
11.9.2 クライアントの/etc/hostsの編集
11.9.3 実行例を見る
11.10.1 サブCAの構築・サブCAで署名したクライアント証明書の作成
11.10.2 サブCAの構築
11.10.3 秘密鍵・署名要求書の作成
11.10.4 ルートCAでcacsr.pemに署名しcacert.pemを作成
11.10.5 サブCAで署名したクライアント証明書の作成
11.10.6 実行例
11.11.1 サーバプログラムの変更
11.11.2 実行例
12.3.1 アドレス情報の決定
12.3.2 IPv4/IPv6両対応のサーバ
12.5.1 パーサジェネレータ/レキサ
12.5.2 設定ファイルの構文
12.5.3 字句解析
12.5.4 構文解析
12.5.5 プログラム本体
12.3.1 アドレス情報の決定
12.3.2 IPv4/IPv6両対応のサーバ
12.5.1 パーサジェネレータ/レキサ
12.5.2 設定ファイルの構文
12.5.3 字句解析
12.5.4 構文解析
12.5.5 プログラム本体
出版後に気がついたり、読者の方からメールでご指摘いただいたりしております。
大変申し訳ありません。
5.5.3 EPOLLを使用した多重化:P.130 (void) close(epfd); が 2箇所ありますが、(void) close(epollfd); の間違いです。
5.8.2 キューイング:P.172 perror("epoll_ctl"); の後に、(void) close(acc); (void) close(epollfd); が必要です。
P.173 perror("epoll_ctl"); の後に、(void) close(epollfd); が必要です。
P.257 実行例で「telnet localhost 22222」としていますが、サーバーは 55555 で待ち受けているので実際には「telnet localhost 55555」としてください。また実行例に「size=1024」が出力されていますが、サンプルコードにこちらのメッセージはありませんので実際には出力されません。
P.311 解説文太字の「hinst.ai_socktype」は、正しくは「hints.ai_socktype」です。
P.325 解説文太字の「hinst.ai_socktype」は、正しくは「hints.ai_socktype」です。
P.362 サンプルプログラムコメントの「インターフェスインデックス」は、正しくは「インタフェースインデックス」です。
P.369 サンプルプログラムコメントの「インターフェスインデックス」は、正しくは「インタフェースインデックス」です。
P.373 u-client-m6.c の「マルチキャスト送信インタフェースの指定」と「マルチキャストループバックの指定」の間に、下記のコードを挿入してください。
/* マルチキャストHOP LIMIT(IPv4のTTLと同じ意味)の指定 */ int opt3 = 64; if (setsockopt(soc, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &opt3, sizeof(int)) == -1) { perror("setsockopt"); (void) close(soc); return (EX_UNAVAILABLE); }
P.387 サンプルプログラムの「(void) printf("(Xerox POP)\n");」は、正しくは「(void) printf("(Xerox PUP)\n");」です。
P.396 サンプルプログラムのコメント「/* TCPパケット */」が2行重複しています。
P.402 pdump.c の終了処理の sig_int_handler() の戻り型が int ですが、正しくは void です。
Copyright © 2011 Mitsuyuki Komata, Motoki Taneda. All rights reserved.