Document create_connection

This commit is contained in:
Antoine Pitrou 2013-11-23 13:55:35 +01:00
parent 9a62a1987f
commit a30d82f597
1 changed files with 71 additions and 0 deletions

View File

@ -115,6 +115,71 @@ a different clock than :func:`time.time`.
This method's behavior is the same as :meth:`call_later`.
Creating connections
^^^^^^^^^^^^^^^^^^^^
.. method:: create_connection(protocol_factory, host=None, port=None, **options)
Create a streaming transport connection to a given Internet *host* and
*port*. *protocol_factory* must be a callable returning a
:ref:`protocol <protocol>` instance.
This method returns a :ref:`coroutine <coroutine>` which will try to
establish the connection in the background. When successful, the
coroutine returns a ``(transport, protocol)`` pair.
The chronological synopsis of the underlying operation is as follows:
#. The connection is established, and a :ref:`transport <transport>`
is created to represent it.
#. *protocol_factory* is called without arguments and must return a
:ref:`protocol <protocol>` instance.
#. The protocol instance is tied to the transport, and its
:meth:`connection_made` method is called.
#. The coroutine returns successfully with the ``(transport, protocol)``
pair.
The created transport is an implementation-dependent bidirectional stream.
.. note::
*protocol_factory* can be any kind of callable, not necessarily
a class. For example, if you want to use a pre-created
protocol instance, you can pass ``lambda: my_protocol``.
*options* are optional named arguments allowing to change how the
connection is created:
* *ssl*: if given and not false, a SSL/TLS transport is created
(by default a plain TCP transport is created). If *ssl* is
a :class:`ssl.SSLContext` object, this context is used to create
the transport; if *ssl* is :const:`True`, a context with some
unspecified default settings is used.
* *server_hostname*, is only for use together with *ssl*,
and sets or overrides the hostname that the target server's certificate
will be matched against. By default the value of the *host* argument
is used. If *host* is empty, there is no default and you must pass a
value for *server_hostname*. If *server_hostname* is an empty
string, hostname matching is disabled (which is a serious security
risk, allowing for man-in-the-middle-attacks).
* *family*, *proto*, *flags* are the optional address family, protocol
and flags to be passed through to getaddrinfo() for *host* resolution.
If given, these should all be integers from the corresponding
:mod:`socket` module constants.
* *sock*, if given, should be an existing, already connected
:class:`socket.socket` object to be used by the transport.
If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
and *local_addr* should be specified.
* *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
to bind the socket to locally. The *local_host* and *local_port*
are looked up using getaddrinfo(), similarly to *host* and *port*.
.. _protocol:
@ -470,6 +535,12 @@ Methods of subprocess transports
On Windows, this method is an alias for :meth:`terminate`.
.. _coroutine:
Coroutines
----------
.. _sync:
Synchronization primitives