Reorders methods.
Uses internal API.
Adds timeout support.
Adds specs related to defaut buffer size.