o Major bugfix
    - Possibility of an infinite loop if the returned value of the read/recv
      was 0. A returned value of 0 means that we've reached the EOF thus the
      pipe/sock is drained so return success not an error.