aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorThorsten von Eicken2020-04-02 10:01:16 -0700
committerDamien George2021-02-17 11:50:54 +1100
commit2c1299b0071c2c528cc01e3cde9eb22743820176 (patch)
tree0679eb4daf9522f30cec65b3d7bce494029482b9 /docs
parent2eed9780ba7074de9e464a2bc771ad14f0332a6c (diff)
extmod/modussl: Fix ussl read/recv/send/write errors when non-blocking.
Also fix related problems with socket on esp32, improve docs for wrap_socket, and add more tests.
Diffstat (limited to 'docs')
-rw-r--r--docs/library/ussl.rst22
1 files changed, 17 insertions, 5 deletions
diff --git a/docs/library/ussl.rst b/docs/library/ussl.rst
index ffe146331..14e3f3ad1 100644
--- a/docs/library/ussl.rst
+++ b/docs/library/ussl.rst
@@ -13,16 +13,23 @@ facilities for network sockets, both client-side and server-side.
Functions
---------
-.. function:: ussl.wrap_socket(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=CERT_NONE, ca_certs=None)
-
+.. function:: ussl.wrap_socket(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=CERT_NONE, ca_certs=None, do_handshake=True)
Takes a `stream` *sock* (usually usocket.socket instance of ``SOCK_STREAM`` type),
and returns an instance of ssl.SSLSocket, which wraps the underlying stream in
an SSL context. Returned object has the usual `stream` interface methods like
- ``read()``, ``write()``, etc. In MicroPython, the returned object does not expose
- socket interface and methods like ``recv()``, ``send()``. In particular, a
- server-side SSL socket should be created from a normal socket returned from
+ ``read()``, ``write()``, etc.
+ A server-side SSL socket should be created from a normal socket returned from
:meth:`~usocket.socket.accept()` on a non-SSL listening server socket.
+ - *do_handshake* determines whether the handshake is done as part of the ``wrap_socket``
+ or whether it is deferred to be done as part of the initial reads or writes
+ (there is no ``do_handshake`` method as in CPython).
+ For blocking sockets doing the handshake immediately is standard. For non-blocking
+ sockets (i.e. when the *sock* passed into ``wrap_socket`` is in non-blocking mode)
+ the handshake should generally be deferred because otherwise ``wrap_socket`` blocks
+ until it completes. Note that in AXTLS the handshake can be deferred until the first
+ read or write but it then blocks until completion.
+
Depending on the underlying module implementation in a particular
:term:`MicroPython port`, some or all keyword arguments above may be not supported.
@@ -31,6 +38,11 @@ Functions
Some implementations of ``ussl`` module do NOT validate server certificates,
which makes an SSL connection established prone to man-in-the-middle attacks.
+ CPython's ``wrap_socket`` returns an ``SSLSocket`` object which has methods typical
+ for sockets, such as ``send``, ``recv``, etc. MicroPython's ``wrap_socket``
+ returns an object more similar to CPython's ``SSLObject`` which does not have
+ these socket methods.
+
Exceptions
----------