TODO
Socket::read and refactor