Initialize a client structure. Always check the return value even if passing
in a pre-allocated structure. Some other initialization may have failed. It
is not required to memset() a structure before providing it.
[in] client Caller allocated structure, or NULL to allocate one.
On success, a pointer to the (possibly allocated) structure. On
failure this will be NULL.