Send data from data buffer
input: data - data to send
timeout - how long to wait until timedout
callback - callback which accept IOResult
1. try to send as much as possible. If complete data sent, then return
IOresult with empty output and clean timeout and error fileds.
2. If we can't send complete buffer, then prepare io call and return
nonempty result output.
So at return user have to check:
a) if result.error == true - send failed
b) if result.data.empty - data send completed
c) otherwise io call were issued, user will receive callback
Send data from data buffer input: data - data to send timeout - how long to wait until timedout callback - callback which accept IOResult 1. try to send as much as possible. If complete data sent, then return IOresult with empty output and clean timeout and error fileds. 2. If we can't send complete buffer, then prepare io call and return nonempty result output. So at return user have to check: a) if result.error == true - send failed b) if result.data.empty - data send completed c) otherwise io call were issued, user will receive callback