- oops, recv was just returning a string instead of the number of bytes read.
- added the size arg back to alloc but it's optional