Async version passes all tests now
Use buffer where possible when sending and receiving from sockets
Use buffer pool
Use awaitable pool