My long term understanding of sockets was that a call to recv() could not be relied upon to return the requested amount of data (be it blocking socket or not)
I was t