# What’s new in Tornado 2.4

## Sep 4, 2012

### General

- Fixed Python 3 bugs in `tornado.auth`, `tornado.locale`, and `tornado.wsgi`.

### HTTP clients

- Removed `max_simultaneous_connections` argument from `tornado.httpclient` (both implementations). This argument hasn’t been useful for some time (if you were using it you probably want `max_clients` instead)
- `tornado.simple_httpclient` now accepts and ignores HTTP 1xx status responses.

### `tornado.ioloop` and `tornado.iostream`

- Fixed a bug introduced in 2.3 that would cause `IOStream` close callbacks to not run if there were pending reads.
- Improved error handling in `SSLIOStream` and SSL-enabled `TCPServer`.
- `SSLIOStream.get_ssl_certificate` now has a `binary_form` argument which is passed to `SSLSocket.getpeercert`.
- `SSLIOStream.write` can now be called while the connection is in progress, same as non-SSL `IOStream` (but be careful not to send sensitive data until the connection has completed and the certificate has been verified).
- `IOLoop.add_handler` cannot be called more than once with the same file descriptor. This was always true for `epoll`, but now the other implementations enforce it too.
- On Windows, `TCPServer` uses `SO_EXCLUSIVEADDRUSER` instead of `SO_REUSEADDR`.

### `tornado.template`

- `{% break %}` and `{% continue %}` can now be used looping constructs in templates.
- It is no longer an error for an if/else/for/etc block in a template to have an empty body.

### `tornado.testing`

- New class `tornado.testing.AsyncHTTPSTestCase` is like `AsyncHTTPTestCase`. but enables SSL for the testing server (by default using a self-signed testing certificate).
- `tornado.testing.main` now accepts additional keyword arguments and forwards them to `unittest.main`.

### `tornado.web`

- New method `RequestHandler.get_template_namespace` can be overridden to add additional variables without modifying keyword arguments to `render_string`.
- `RequestHandler.add_header` now works with `WSGIApplication`.
- `RequestHandler.get_secure_cookie` now handles a potential error case.
- `RequestHandler.__init__` now calls `super().__init__` to ensure that all constructors are called when multiple inheritance is used.
- Docs have been updated with a description of all available `Application settings`

### Other modules

- `OAuthMixin` now accepts `"oob"` as a `callback_uri`.
- `OpenIdMixin` now also returns the `claimed_id` field for the user.
- `tornado.platform.twisted` shutdown sequence is now more compatible.
- The logging configuration used in `tornado.options` is now more tolerant of non-ascii byte strings.