Maybe we need two error type for initialize error.
There already has two error kind: ServerError, ClientError.
I think we can rename it to ServerIntializeError and ClientInitializeError. And return it instead of std::io::Error, which I used it for being lazy.