summaryrefslogtreecommitdiff
path: root/Doc/library/asyncio.rst
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-11-23 13:55:35 +0100
committerAntoine Pitrou <solipsis@pitrou.net>2013-11-23 13:55:35 +0100
commitb64e61a6d78b3deb9d87535779827291d6cc1f56 (patch)
tree43e293cf078059158efa6dc275f2707525300b5e /Doc/library/asyncio.rst
parent85a4cb19b6b80cf2cf13c344ab5d0805243a5181 (diff)
downloadcpython-b64e61a6d78b3deb9d87535779827291d6cc1f56.tar.gz
Document create_connection
Diffstat (limited to 'Doc/library/asyncio.rst')
-rw-r--r--Doc/library/asyncio.rst71
1 files changed, 71 insertions, 0 deletions
diff --git a/Doc/library/asyncio.rst b/Doc/library/asyncio.rst
index 15405c8174..7b8151fc0d 100644
--- a/Doc/library/asyncio.rst
+++ b/Doc/library/asyncio.rst
@@ -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