18. プロセス間通信とネットワーク
********************************

この章で解説されるモジュールは他のプロセスと通信するメカニズムを提供し
ます。

例えば "signal" や "mmap" のように、同じマシン上の 2 つのプロセスでし
か使えないモジュールがあります。その他のモジュールは 2 つ以上のプロセ
スを使ってマシン間で通信できるネットワークプロトコルをサポートします。

この章で解説されるモジュールのリスト:

* 18.1. "socket" --- 低水準ネットワークインターフェース

  * 18.1.1. ソケットファミリー

  * 18.1.2. モジュールの内容

    * 18.1.2.1. 例外

    * 18.1.2.2. 定数

    * 18.1.2.3. 関数

      * 18.1.2.3.1. ソケットの作成

      * 18.1.2.3.2. その他の関数

  * 18.1.3. socket オブジェクト

  * 18.1.4. ソケットタイムアウトの注意事項

    * 18.1.4.1. タイムアウトと "connect" メソッド

    * 18.1.4.2. タイムアウトと "accept" メソッド

  * 18.1.5. 使用例

* 18.2. "ssl" --- ソケットオブジェクトに対する TLS/SSL ラッパー

  * 18.2.1. 関数、定数、例外

    * 18.2.1.1. ソケットの作成

    * 18.2.1.2. コンテキストの作成

    * 18.2.1.3. 乱数生成

    * 18.2.1.4. 証明書の取り扱い

    * 18.2.1.5. 定数

  * 18.2.2. SSL ソケット

  * 18.2.3. SSL コンテキスト

  * 18.2.4. 証明書

    * 18.2.4.1. 証明書チェイン

    * 18.2.4.2. CA 証明書

    * 18.2.4.3. 秘密鍵と証明書の組み合わせ

    * 18.2.4.4. 自己署名証明書

  * 18.2.5. 使用例

    * 18.2.5.1. SSLサポートをテストする

    * 18.2.5.2. クライアントサイドの処理

    * 18.2.5.3. サーバサイドの処理

  * 18.2.6. ノンブロッキングソケットについての注意事項

  * 18.2.7. メモリ BIO サポート

  * 18.2.8. SSL セッション

  * 18.2.9. セキュリティで考慮すべき点

    * 18.2.9.1. 最善のデフォルト値

    * 18.2.9.2. 手動での設定

      * 18.2.9.2.1. 証明書の検証

      * 18.2.9.2.2. プロトコルのバージョン

      * 18.2.9.2.3. 暗号の選択

    * 18.2.9.3. マルチプロセス化

  * 18.2.10. LibreSSL support

* 18.3. "select" --- I/O 処理の完了を待機する

  * 18.3.1. "/dev/poll" ポーリングオブジェクト

  * 18.3.2. エッジおよびレベルトリガポーリング (epoll) オブジェクト

  * 18.3.3. ポーリングオブジェクト

  * 18.3.4. kqueue オブジェクト

  * 18.3.5. kevent オブジェクト

* 18.4. "selectors" --- 高水準の I/O 多重化

  * 18.4.1. はじめに

  * 18.4.2. クラス

  * 18.4.3. 使用例

* 18.5. "asyncio" --- 非同期 I/O、イベントループ、コルーチンおよびタス
  ク

  * 18.5.1. 基底イベントループ

    * 18.5.1.1. イベントループの実行

    * 18.5.1.2. 呼び出し (call)

    * 18.5.1.3. 遅延呼び出し

    * 18.5.1.4. Future

    * 18.5.1.5. タスク

    * 18.5.1.6. コネクションの作成

    * 18.5.1.7. 待ち受けコネクションの作成

    * 18.5.1.8. ファイル記述子の監視

    * 18.5.1.9. 低水準のソケット操作

    * 18.5.1.10. ホスト名の解決

    * 18.5.1.11. パイプの接続

    * 18.5.1.12. UNIX シグナル

    * 18.5.1.13. 実行者

    * 18.5.1.14. エラーハンドリング API

    * 18.5.1.15. デバッグモード

    * 18.5.1.16. サーバー

    * 18.5.1.17. ハンドル

    * 18.5.1.18. イベントループの例

      * 18.5.1.18.1. call_soon() を使った Hello World

      * 18.5.1.18.2. call_later() で現在の日時を表示する

      * 18.5.1.18.3. 読み込みイベント用ファイル記述子の監視

      * 18.5.1.18.4. SIGINT および SIGTERM 用のシグナルハンドラーの設
        定

  * 18.5.2. イベントループ

    * 18.5.2.1. イベントループ関数

    * 18.5.2.2. 利用可能なイベントループ

    * 18.5.2.3. プラットフォームでのサポート

      * 18.5.2.3.1. Windows

      * 18.5.2.3.2. Mac OS X

    * 18.5.2.4. イベントループのポリシーとデフォルトポリシー

    * 18.5.2.5. イベントループポリシーインターフェース

    * 18.5.2.6. グローバルループポリシーへのアクセス

    * 18.5.2.7. Customizing the event loop policy

  * 18.5.3. タスクとコルーチン

    * 18.5.3.1. コルーチン

      * 18.5.3.1.1. 例: Hello World コルーチン

      * 18.5.3.1.2. 例: 現在の日時を表示するコルーチン

      * 18.5.3.1.3. 例: コルーチンのチェーン

    * 18.5.3.2. InvalidStateError

    * 18.5.3.3. TimeoutError

    * 18.5.3.4. フューチャー

      * 18.5.3.4.1. 例: run_until_complete() を使ったフューチャ

      * 18.5.3.4.2. 例: run_forever() を使ったフューチャ

    * 18.5.3.5. タスク

      * 18.5.3.5.1. 例: タスクの並列実行

    * 18.5.3.6. タスク関数

  * 18.5.4. Transports and protocols (callback based API)

    * 18.5.4.1. トランスポート

      * 18.5.4.1.1. BaseTransport

      * 18.5.4.1.2. ReadTransport

      * 18.5.4.1.3. WriteTransport

      * 18.5.4.1.4. DatagramTransport

      * 18.5.4.1.5. BaseSubprocessTransport

    * 18.5.4.2. プロトコル

      * 18.5.4.2.1. プロトコルクラス群

      * 18.5.4.2.2. コネクションコールバック

      * 18.5.4.2.3. ストリーミングプロトコル

      * 18.5.4.2.4. データグラムプロトコル

      * 18.5.4.2.5. フロー制御コールバック

      * 18.5.4.2.6. コルーチンとプロトコル

    * 18.5.4.3. プロトコルの例

      * 18.5.4.3.1. TCP Echo クライアントプロトコル

      * 18.5.4.3.2. TCP Echo サーバープロトコル

      * 18.5.4.3.3. UDP Echo クライアントプロトコル

      * 18.5.4.3.4. UDP Echo サーバープロトコル

      * 18.5.4.3.5. プロトコルを使ってデータを待つオープンソケットの登
        録

  * 18.5.5. ストリーム (コルーチンベースの API)

    * 18.5.5.1. ストリーム関数

    * 18.5.5.2. StreamReader

    * 18.5.5.3. StreamWriter

    * 18.5.5.4. StreamReaderProtocol

    * 18.5.5.5. IncompleteReadError

    * 18.5.5.6. LimitOverrunError

    * 18.5.5.7. ストリームの例

      * 18.5.5.7.1. ストリームを使った TCP Echo クライアント

      * 18.5.5.7.2. ストリームを使った TCP Echo サーバー

      * 18.5.5.7.3. HTTP ヘッダーの取得

      * 18.5.5.7.4. ストリームを使ってデータを待つオープンソケットの登
        録

  * 18.5.6. サブプロセス

    * 18.5.6.1. Windows でのイベントループ

    * 18.5.6.2. サブプロセスの作成: Process を使用した高水準 API

    * 18.5.6.3. サブプロセスの作成: subprocess.Popen を使用した低水準
      API

    * 18.5.6.4. 定数

    * 18.5.6.5. Process

    * 18.5.6.6. サブプロセスとスレッド

    * 18.5.6.7. サブプロセスの例

      * 18.5.6.7.1. トランスポートおよびプロトコルを使用したサブプロセ
        ス

      * 18.5.6.7.2. ストリームを使用したサブプロセス

  * 18.5.7. 同期プリミティブ

    * 18.5.7.1. ロック

      * 18.5.7.1.1. Lock

      * 18.5.7.1.2. Event

      * 18.5.7.1.3. Condition

    * 18.5.7.2. セマフォ

      * 18.5.7.2.1. Semaphore

      * 18.5.7.2.2. BoundedSemaphore

  * 18.5.8. キュー

    * 18.5.8.1. Queue

    * 18.5.8.2. PriorityQueue

    * 18.5.8.3. LifoQueue

      * 18.5.8.3.1. 例外

  * 18.5.9. asyncio での開発

    * 18.5.9.1. asyncio のデバッグモード

    * 18.5.9.2. 取り消し

    * 18.5.9.3. 並行処理とマルチスレッド処理

    * 18.5.9.4. ブロック関数を正しく扱う

    * 18.5.9.5. ログ記録

    * 18.5.9.6. スケジュールされなかったコルーチンオブジェクトの検出

    * 18.5.9.7. 未処理の例外の検出

    * 18.5.9.8. コルーチンを正しくチェーンする

    * 18.5.9.9. 未完のタスクの破棄

    * 18.5.9.10. トランスポートとイベントループを閉じる

* 18.6. "asyncore" --- 非同期ソケットハンドラ

  * 18.6.1. asyncoreの例: 簡単なHTTPクライアント

  * 18.6.2. 基本的な echo サーバーの例

* 18.7. "asynchat" --- 非同期ソケットコマンド/レスポンスハンドラ

  * 18.7.1. asynchat 使用例

* 18.8. "signal" --- 非同期イベントにハンドラを設定する

  * 18.8.1. 一般的なルール

    * 18.8.1.1. Python のシグナルハンドラの実行

    * 18.8.1.2. シグナルとスレッド

  * 18.8.2. モジュールの内容

  * 18.8.3. 使用例

* 18.9. "mmap" --- メモリマップファイル
