diff --git a/doc/_sources/changelog.rst.txt b/doc/_sources/changelog.rst.txt
index 4d9c94d..c57fd85 100644
--- a/doc/_sources/changelog.rst.txt
+++ b/doc/_sources/changelog.rst.txt
@@ -1,3 +1,24 @@
+0.21.0
+======
+* New timeout error API: .is_timeout=True on exception object
+ It's now easy to test if network error is transient and retry is appropriate.
+ Please spread the word and invite other libraries to support this interface.
+* hubs: use monotonic clock by default (bundled package); Thanks to Roman Podoliaka and Victor Stinner
+* dns: EVENTLET_NO_GREENDNS option is back, green is still default
+* dns: hosts file was consulted after nameservers
+* ssl: RecursionError on Python3.6+; Thanks to justdoit0823@github and Gevent developers
+* wsgi: log_output=False was not disabling startup and accepted messages
+* greenio: Fixed OSError: [WinError 10038] Socket operation on nonsocket
+* dns: EAI_NODATA was removed from RFC3493 and FreeBSD
+* green.select: fix mark_as_closed() wrong number of args
+* green.zmq: socket.{recv,send}_* signatures did not match recent upstream pyzmq
+* New feature: Add zipkin tracing to eventlet
+* db_pool: proxy Connection.set_isolation_level()
+* green.zmq: support RCVTIMEO (receive timeout)
+* green.profile: Python3 compatibility; Thanks to Artur Stawiarski
+* support: upgrade bundled six to 1.10 (dbfbfc818e3d)
+* python3.6: http.client.request support chunked_encoding
+
0.20.1
======
* dns: try unqualified queries as top level
diff --git a/doc/_sources/ssl.rst.txt b/doc/_sources/ssl.rst.txt
index f89ec54..b84485b 100644
--- a/doc/_sources/ssl.rst.txt
+++ b/doc/_sources/ssl.rst.txt
@@ -30,14 +30,24 @@ PyOpenSSL
:mod:`eventlet.green.OpenSSL` has exactly the same interface as pyOpenSSL_ `(docs) `_, and works in all versions of Python. This module is much more powerful than :func:`socket.ssl`, and may have some advantages over :mod:`ssl`, depending on your needs.
-Here's an example of a server::
+For testing purpose first create self-signed certificate using following commands ::
+
+ $ openssl genrsa 1024 > server.key
+ $ openssl req -new -x509 -nodes -sha1 -days 365 -key server.key > server.cert
+
+Keep these Private key and Self-signed certificate in same directory as `server.py` and `client.py` for simplicity sake.
+
+Here's an example of a server (`server.py`) ::
from eventlet.green import socket
from eventlet.green.OpenSSL import SSL
# insecure context, only for example purposes
context = SSL.Context(SSL.SSLv23_METHOD)
- context.set_verify(SSL.VERIFY_NONE, lambda *x: True))
+ # Pass server's private key created
+ context.use_privatekey_file('server.key')
+ # Pass self-signed certificate created
+ context.use_certificate_file('server.cert')
# create underlying green socket and wrap it in ssl
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -45,7 +55,7 @@ Here's an example of a server::
# configure as server
connection.set_accept_state()
- connection.bind(('127.0.0.1', 80443))
+ connection.bind(('127.0.0.1', 8443))
connection.listen(50)
# accept one client connection then close up shop
@@ -55,4 +65,28 @@ Here's an example of a server::
client_conn.close()
connection.close()
+Here's an example of a client (`client.py`) ::
+
+ import socket
+ # Create socket
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ # Connect to server
+ s.connect(('127.0.0.1', 8443))
+ sslSocket = socket.ssl(s)
+ print repr(sslSocket.server())
+ print repr(sslSocket.issuer())
+ sslSocket.write('Hello secure socket\n')
+ # Close client
+ s.close()
+
+Running example::
+
+In first terminal
+
+ $ python server.py
+
+In another terminal
+
+ $ python client.py
+
.. _pyOpenSSL: https://launchpad.net/pyopenssl
diff --git a/doc/authors.html b/doc/authors.html
index 4e23b8d..55fd54d 100644
--- a/doc/authors.html
+++ b/doc/authors.html
@@ -6,7 +6,7 @@