The wrapped exception classes are not created until ThriftClient.new is called with the correct client class. This makes it difficult to write code like `rescue MyThrift::Client::TransportException` because the exception class may not exist yet. Callers may now use ThriftClient.create_wrapped_exception_classes to ensure the desired classes have been created.
Cache the connection and client in the server object. If a client is cleanly disconnected we don't need to tear it all down. This will mean any negotiations made at the protocol level will hold when the client reconnected. However the post_connect callback at the application layer will still be called.
… thrift client.