tornado.netutil — その他のネットワークユーティリティ

その他のネットワークユーティリティコード。

tornado.netutil.bind_sockets(port: int, address: Optional[str] = None, family: AddressFamily = AddressFamily.AF_UNSPEC, backlog: int = 128, flags: Optional[int] = None, reuse_port: bool = False) List[socket][ソース]

指定されたポートとアドレスにバインドされたリスニングソケットを作成します。

ソケットオブジェクトのリストを返します(指定されたアドレスが複数のIPアドレスにマップされる場合、複数のソケットが返されます。これはIPv4とIPv6の混在使用で最も一般的です)。

アドレスはIPアドレスまたはホスト名のいずれかです。ホスト名の場合、サーバーはその名前に関連付けられたすべてのIPアドレスでリッスンします。アドレスは、使用可能なすべてのインターフェースでリッスンするために、空の文字列またはNoneにすることができます。ファミリは、IPv4またはIPv6アドレスに制限するために、socket.AF_INETまたはsocket.AF_INET6のいずれかに設定できます。それ以外の場合は、使用可能であれば両方が使用されます。

backlog引数は、socket.listen()と同じ意味を持ちます。

flagsは、getaddrinfoへのAI_*フラグのビットマスクです。たとえば、socket.AI_PASSIVE | socket.AI_NUMERICHOSTなどです。

reuse_portオプションは、リスト内のすべてのソケットに対してSO_REUSEPORTオプションを設定します。プラットフォームがこのオプションをサポートしていない場合、ValueErrorが発生します。

tornado.netutil.bind_unix_socket(file: str, mode: int = 384, backlog: int = 128) socket[ソース]

リスニングunixソケットを作成します。

指定された名前のソケットが既に存在する場合は、削除されます。その名前の他のファイルが存在する場合は、例外が発生します。

ソケットオブジェクトを返します(bind_socketsのようなソケットオブジェクトのリストではありません)

tornado.netutil.add_accept_handler(sock: socket, callback: Callable[[socket, Any], None]) Callable[[], None][ソース]

IOLoopイベントハンドラーを追加して、sockで新しい接続を受け入れます。

接続が受け入れられると、callback(connection, address)が実行されます(connectionはソケットオブジェクト、addressは接続の相手側のアドレスです)。このシグネチャは、IOLoopハンドラーで使用されるcallback(fd, events)シグネチャとは異なることに注意してください。

呼び出し可能なものが返されます。呼び出されると、IOLoopイベントハンドラーが削除され、それ以上の受信接続の処理が停止します。

バージョン 5.0 で変更: io_loop引数(バージョン4.1以降非推奨)が削除されました。

バージョン 5.0 で変更: 呼び出し可能なものが返されるようになりました(以前はNoneが返されていました)。

tornado.netutil.is_valid_ip(ip: str) bool[ソース]

与えられた文字列が正しい形式のIPアドレスであれば、True を返します。

IPv4とIPv6をサポートします。

class tornado.netutil.Resolver(*args: Any, **kwargs: Any)[ソース]

設定可能な非同期DNSリゾルバインターフェース。

デフォルトでは、ブロッキング実装が使用されます(単にsocket.getaddrinfoを呼び出すだけです)。別の実装は、Resolver.configureクラスメソッドを使用して選択できます。

Resolver.configure('tornado.netutil.ThreadedResolver')

Tornadoに含まれるこのインターフェースの実装は次のとおりです。

バージョン 5.0 で変更: デフォルトの実装がBlockingResolverからDefaultExecutorResolverに変更されました。

バージョン 6.2 で変更: デフォルトの実装がDefaultExecutorResolverからDefaultLoopResolverに変更されました。

resolve(host: str, port: int, family: AddressFamily = AddressFamily.AF_UNSPEC) Awaitable[List[Tuple[int, Any]]][ソース]

アドレスを解決します。

host引数は、ホスト名またはリテラルIPアドレスである可能性のある文字列です。

結果が(family、address)ペアのリストであるFutureを返します。ここで、addressは、socket.connectに渡すのに適したタプルです(つまり、IPv4の場合は(host, port)ペア、IPv6の場合は追加のフィールドが存在する場合があります)。callbackが渡された場合、完了時に引数として結果を使用して実行されます。

例外

IOError – アドレスを解決できない場合。

バージョン 4.4 で変更: すべての実装でIOErrorを発生させるように標準化しました。

バージョン 6.0 で変更: callback引数が削除されました。代わりに返された awaitable オブジェクトを使用してください。

close() None[ソース]

使用されているリソースを解放して、Resolverを閉じます。

バージョン 3.1 で追加.

class tornado.netutil.DefaultExecutorResolver(*args: Any, **kwargs: Any)[ソース]

IOLoop.run_in_executorを使用するリゾルバ実装。

バージョン 5.0 で追加.

バージョン 6.2 から非推奨: 代わりにDefaultLoopResolverを使用してください。

class tornado.netutil.DefaultLoopResolver(*args: Any, **kwargs: Any)[ソース]

asyncio.loop.getaddrinfoを使用するリゾルバ実装。

class tornado.netutil.ExecutorResolver(*args: Any, **kwargs: Any)[ソース]

concurrent.futures.Executor を使用したリゾルバーの実装です。

使用するエグゼキューターをより詳細に制御する必要がある場合は、ThreadedResolver の代わりに使用してください。

close_resolver=False が指定されていない限り、リゾルバーが閉じられるとエグゼキューターはシャットダウンされます。同じエグゼキューターを他の場所で再利用したい場合はこれを使用してください。

バージョン 5.0 で変更: io_loop引数(バージョン4.1以降非推奨)が削除されました。

バージョン 5.0 で非推奨: デフォルトの Resolverasyncio.loop.getaddrinfo を使用するようになりました。このクラスの代わりにそれを使用してください。

class tornado.netutil.BlockingResolver(*args: Any, **kwargs: Any)[ソース]

socket.getaddrinfo を使用した、デフォルトの Resolver の実装です。

IOLoop は解決中にブロックされますが、コールバックは次の IOLoop のイテレーションまで実行されません。

バージョン 5.0 で非推奨: デフォルトの ResolverIOLoop.run_in_executor を使用するようになりました。このクラスの代わりにそれを使用してください。

class tornado.netutil.ThreadedResolver(*args: Any, **kwargs: Any)[ソース]

マルチスレッドによる非ブロッキングの Resolver の実装です。

concurrent.futures パッケージがインストールされている必要があります(Python 3.2 以降の標準ライブラリに含まれています。古いバージョンでは pip install futures でインストールできます)。

スレッドプールのサイズは次のように設定できます。

Resolver.configure('tornado.netutil.ThreadedResolver',
                   num_threads=10)

バージョン 3.1 で変更: すべての ThreadedResolver は単一のスレッドプールを共有し、そのサイズは最初に作成されたもので設定されます。

バージョン 5.0 で非推奨: デフォルトの ResolverIOLoop.run_in_executor を使用するようになりました。このクラスの代わりにそれを使用してください。

class tornado.netutil.OverrideResolver(*args: Any, **kwargs: Any)[ソース]

オーバーライドのマッピングを使用してリゾルバーをラップします。

これは、システム全体の設定を変更せずに、ローカル DNS の変更(たとえばテスト用)を行うために使用できます。

マッピングには 3 つの形式があります。

{
    # Hostname to host or ip
    "example.com": "127.0.1.1",

    # Host+port to host+port
    ("login.example.com", 443): ("localhost", 1443),

    # Host+port+address family to host+port
    ("login.example.com", 443, socket.AF_INET6): ("::1", 1443),
}

バージョン 5.0 で変更: ホスト、ポート、ファミリのトリプレットのサポートを追加しました。

tornado.netutil.ssl_options_to_context(ssl_options: Union[Dict[str, Any], SSLContext], server_side: Optional[bool] = None) SSLContext[ソース]

ssl_options ディクショナリを SSLContext オブジェクトに変換しようとします。

ssl_options ディクショナリには、ssl.SSLContext.wrap_socket に渡されるキーワードが含まれています。Python 2.7.9 以降では、ssl.SSLContext オブジェクトを代わりに使用できます。この関数は、ディクショナリ形式を同等の SSLContext に変換し、両方の形式を受け入れるコンポーネントが、SNI や NPN などの機能を使用するために SSLContext バージョンにアップグレードする必要がある場合に使用できます。

バージョン 6.2 で変更: server_side 引数を追加しました。この引数を省略すると、Python 3.10 で DeprecationWarning が発生します。

tornado.netutil.ssl_wrap_socket(socket: socket, ssl_options: Union[Dict[str, Any], SSLContext], server_hostname: Optional[str] = None, server_side: Optional[bool] = None, **kwargs: Any) SSLSocket[ソース]

指定されたソケットをラップする ssl.SSLSocket を返します。

ssl_options は、ssl.SSLContext オブジェクトか、(ssl_options_to_context が受け入れるような)辞書である可能性があります。追加のキーワード引数は、ssl.SSLContext.wrap_socket に渡されます。

バージョン 6.2 で変更: server_side 引数を追加しました。この引数を省略すると、Python 3.10 で DeprecationWarning が発生します。