I'm not even sure why `serve_forever2` and `shutdown2` were introduced
in the first place... It probably follows from my misconception about
the SocketServer module. After having studied the module again, I come
to the conclusion that we can get rid of my crap, simultanously
reducing probability of #1085 (hopefully down to 0)!
`server_forever` is used throughout tests instead of `handle_request`,
because `shutdown`, following docs, "must be called while
serve_forever() is running in another thread, or it will deadlock",
and our `probe_sni` HTTP request is already enough to kill single
`handle_request`.
We don't need to use any busy waiting block or `sleep` between serve
and shutdown; studying CPython source code leads to the conclusion
that the following construction is non-blocking:
```python
import threading, SocketServer
s = SocketServer.TCPServer(("", 0), None)
t = threading.Thread(target=s.shutdown)
t.start()
s.serve_forever() # returns immediately
t.join() # returns immediately
```
* s/privilidged/privileged/
* s/a HTTP/an HTTP/
* Add whitespace at the end of the lines to improve user experience
The lack of trailing whitespace on these entries causes Debian's debconf
interface to join the last word of a line with the first word of the
next line, with no space in between.
Add a server_names_hash_bucket_size directive during challenges to fix an nginx
crash on restart (Fixes#922).
Use fullchain instead of chain (Fixes#610).
Implement OCSP stapling (Fixes#937, Fixes#931).
Hide Boulder output in integration tests to make them more readable.