LnpB  /** 
*「Linuxネットワークプログラミングバイブル」サポートページ
*/ 

Linux Network Programming Bible
C言語とLinuxを使った、ネットワークプログラミングのすべてを学べる解説書です。
小俣氏の前著『C for Linux2 超実践Linuxネットワークプログラミング』を大幅に刷新し、
IPv6に対応し、新しい環境での実行例や便利なライブラリの紹介などを新たに盛り込みました。
本書では、多重化・エラー処理などの必須の実装から、
IPv4/IPv6デュアルスタック・RAWソケット・SSLなど定番のテクニックを学べます。
また、実際にプログラムを作って動かすことで理解を深めることに重点をおき、C言語によるサンプルを多数収録。
高性能で信頼性が高いシステムが構築できるようになります。

Menu

本の目次

Chapter 01 ◆ TCP/IPプログラミング入門

1.1 この章の目的

1.2 この章の概要

1.3 サーバプログラムの作り方

1.4 クライアントプログラムの作り方

1.5 この章のまとめ

Chapter 02 ◆ 通信の仕組み

2.1 この章の目的

2.2 この章の概要

2.3 インターネット・プロトコル・スイート

2.3.1 リンク・レイヤ

2.3.2 インターネット・レイヤ

2.3.3 トランスポート・レイヤ

2.4 パケットの解析

2.4.1 tcpdumpによるパケット解析

2.4.2 パケットのデータ解析

2.4.3 GUIでパケットのデータ解析

2.5 この章のまとめ

Chapter 03 ◆ サーバプログラムのレベルアップ

3.1 この章の目的

3.2 この章の概要

3.3 アドレス情報

3.3.1 sockaddr型構造体

3.3.2 addrinfo型構造体

3.4 アドレスのバインド

3.5 デーモン化

3.6 サーバプログラムの再起動

3.6.1 シグナルと再起動

3.6.2 サーバプログラムへの応用

3.7 シグナルの管理

3.7.1 正常終了

3.7.2 シグナルの無視

3.8 バッファの管理

3.9 この章のまとめ

Chapter 04 ◆ クライアントプログラムのレベルアップ

4.1 この章の目的

4.2 この章の概要

4.3 アドレス解決

4.3.1 sockaddr型構造体

4.3.2 addrinfo型構造体

4.3.3 hostent型構造体

4.4 コネクトのタイムアウト

4.5 この章のまとめ

Chapter 05 ◆ 多重化

5.1 この章の目的

5.2 この章の概要

5.3 多重化の重要性

5.4 マルチクライアント化の方法

5.5 シングルプロセス・シングルスレッドでのマルチクライアント化

5.5.1 select()を使用したマルチクライアント化

5.5.2 poll()を使用した多重化

5.5.3 EPOLLを使用した多重化

5.6 マルチプロセス・マルチスレッドによる多重化

5.6.1 マルチプロセスによる多重化

5.6.2 マルチスレッドによる並列処理

5.7 アクセプト前後の2通りの考え方

5.7.1 マルチプロセスでの実現

5.7.2 マルチスレッドでの実現

5.8 多重化の組み合わせ

5.8.1 スレッド間のデータ受け渡し

5.8.2 キューイング

5.9 各方式での速度比較

5.10 高負荷試験用クライアントプログラムのソース

5.11 クライアントの多重化

5.11.1 select()による多重化

5.11.2 poll()による多重化

5.11.3 ノンブロッキングI/Oによる多重化

5.11.4 マルチプロセスによる並列処理

5.11.5 マルチスレッドによる多重化

5.12 この章のまとめ

Chapter 06 ◆ 送受信のレベルアップ

6.1 この章の目的

6.2 この章の概要

6.3 受信タイムアウト

6.4 サイズの大きなデータの扱い

6.4.1 受信プログラム

6.4.2 送信プログラム

6.5 行単位の受信

6.6 select(), poll(), EPOLL との組み合わせ

6.7 この章のまとめ

Chapter 07 ◆ エラー処理

7.1 この章の目的

7.2 この章の概要

7.3 アクセプト時のエラー

7.4 コネクト時のエラー

7.5 送信時のエラー

7.6 受信時のエラー

7.7 経路切断検知

7.8 この章のまとめ

Chapter 08 ◆ インタフェース情報

8.1 この章の目的

8.2 この章の概要

8.3 情報表示サンプル

8.4 この章のまとめ

Chapter 09 ◆ UDP/IPプログラミング

9.1 この章の目的

9.2 この章の概要

9.3 サーバプログラムの作り方

9.4 クライアントプログラムの作り方

9.5 UDP/IPでのconnect()

9.6 送信可能サイズ

9.7 受信パケットはどのくらいたまるか

9.8 ブロードキャスト

9.9 複数NICがあるホストでの問題

9.10 マルチキャスト

9.10.1 サーバプログラム

9.10.2 クライアントプログラム

9.11 IPv6でマルチキャスト

9.11.1 サーバプログラム

9.11.2 クライアントプログラム

9.12 この章のまとめ

Chapter 10 ◆ RAWソケット

10.1 この章の目的

10.2 この章の概要

10.2.1 tcphdr型構造体

10.2.2 udphdr型構造体

10.2.3 ip型構造体

10.2.4 ip6_hdr型構造体

10.2.5 ether_header型構造体

10.3 パケットキャプチャプログラムの作成

10.4 UDP/IP送受信プログラムの作成

10.4.1 クライアントプログラム

10.4.2 サーバプログラム

10.5 この章のまとめ

Chapter 11 ◆ SSLプログラミング

11.1 この章の目的

11.2 この章の概要

11.3 証明書の作成

11.3.1 前準備

11.3.2 ルートCAの構築

11.3.3 ルートCA証明書の内容の確認

11.4 サーバ証明書の作成

11.4.1 秘密鍵の作成

11.4.2 パスフレーズなしの秘密鍵の作成

11.4.3 証明書署名要求書の作成

11.4.4 ルートCAによる署名

11.5 クライアント証明書の作成

11.5.1 秘密鍵の作成

11.5.2 証明書署名要求書の作成

11.5.3 ルートCAによる署名

11.5.4 PKCS12形式への変換

11.6 CA証明書一覧の作成

11.6.1 CA証明書一覧ファイルの作成

11.6.2 CA証明書一覧ディレクトリの作成

11.7 クライアントプログラム

11.8 サーバプログラム

11.9 実行例

11.9.1 DHパラメータを含むファイルの作成

11.9.2 クライアントの/etc/hostsの編集

11.9.3 実行例を見る

11.10 サブCA署名の証明書での確認

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 商用CAの利用

11.11.1 サーバプログラムの変更

11.11.2 実行例

11.12 この章のまとめ

Chapter 12 ◆ 目的別テクニック

12.1 この章の目的

12.2 この章の概要

12.3 アドレスファミリに依存しないソケットプログラミング

12.3.1 アドレス情報の決定

12.3.2 IPv4/IPv6両対応のサーバ

12.4 ライブラリの利用

12.5 設定ファイルの読み込み

12.5.1 パーサジェネレータ/レキサ

12.5.2 設定ファイルの構文

12.5.3 字句解析

12.5.4 構文解析

12.5.5 プログラム本体

12.6 この章のまとめ

コラム目次

ネットワークサーバプログラムは信頼性が命!

得意分野にこだわるのも悪くない

ネットワークプログラムを作るときは必ず接続相手も作って確認!

ログ出力について

エディタ

パケットキャプチャ

12.1 この章の目的

12.2 この章の概要

12.3 アドレスファミリに依存しないソケットプログラミング

12.3.1 アドレス情報の決定

12.3.2 IPv4/IPv6両対応のサーバ

12.4 ライブラリの利用

12.5 設定ファイルの読み込み

12.5.1 パーサジェネレータ/レキサ

12.5.2 設定ファイルの構文

12.5.3 字句解析

12.5.4 構文解析

12.5.5 プログラム本体

12.6 この章のまとめ

コラム目次

ネットワークサーバプログラムは信頼性が命!

得意分野にこだわるのも悪くない

ネットワークプログラムを作るときは必ず接続相手も作って確認!

ログ出力について

エディタ

パケットキャプチャ

▲上に戻る

ソースのダウンロード

Chapter 01 ◆ TCP/IPプログラミング入門

Chapter 03 ◆ サーバプログラムのレベルアップ

Chapter 04 ◆ クライアントプログラムのレベルアップ

Chapter 05 ◆ 多重化

Chapter 06 ◆ 送受信のレベルアップ

Chapter 08 ◆ インタフェース情報

Chapter 09 ◆ UDP/IPプログラミング

Chapter 10 ◆ RAWソケット

Chapter 11 ◆ SSLプログラミング

11.3 証明書の作成

Chapter 12 ◆ 目的別テクニック

▲上に戻る

正誤表

出版後に気がついたり、読者の方からメールでご指摘いただいたりしております。
大変申し訳ありません。

Chapter 05 ◆ 多重化

5.5 シングルプロセス・シングルスレッドでのマルチクライアント化

5.5.3 EPOLLを使用した多重化:P.130 (void) close(epfd); が 2箇所ありますが、(void) close(epollfd); の間違いです。

5.8 多重化の組み合わせ

5.8.2 キューイング:P.172 perror("epoll_ctl"); の後に、(void) close(acc); (void) close(epollfd); が必要です。

P.173 perror("epoll_ctl"); の後に、(void) close(epollfd); が必要です。

Chapter 06 ◆ 送受信のレベルアップ

6.5 行単位の受信

P.257 実行例で「telnet localhost 22222」としていますが、サーバーは 55555 で待ち受けているので実際には「telnet localhost 55555」としてください。また実行例に「size=1024」が出力されていますが、サンプルコードにこちらのメッセージはありませんので実際には出力されません。

6.6 select(), poll(), EPOLL との組み合わせ:P.261 (void) close(epfd); が 2箇所ありますが、(void) close(epollfd); の間違いです。

Chapter 09 ◆ UDP/IPプログラミング

9.5 UDP/IPでのconnect()

P.311 解説文太字の「hinst.ai_socktype」は、正しくは「hints.ai_socktype」です。

P.325 解説文太字の「hinst.ai_socktype」は、正しくは「hints.ai_socktype」です。

9.11.1 サーバプログラム

P.362 サンプルプログラムコメントの「インターフェスインデックス」は、正しくは「インタフェースインデックス」です。

P.369 サンプルプログラムコメントの「インターフェスインデックス」は、正しくは「インタフェースインデックス」です。

9.11.2 クライアントプログラム

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);
}
      

Chapter 10 ◆ RAWソケット

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 です。

▲上に戻る

mailto: mail

Copyright © 2011 Mitsuyuki Komata, Motoki Taneda. All rights reserved.