It looks about OK to me, except not all of the data might be transmitted in one send() - you might only get half of the data across, and the other half will be lost if you don't account for it somewhere. send() returns the number of bytes that were successfully transmitted, so you might want to have Send() return that instead of a bool.

Something else fun to try would be to return false, but queue up the data in an internal buffer (or a list of buffers) and finish all incomplete sends the next time you call Send(), before beginning to send the new data - or perhaps even allow Send(NULL), which would mean that rather than sending any new data, Send() should just finish up sending any leftovers from a previous call