I couldn't find much information on this, but I have a simple sequence of code like:
// does it wait on Write() until successful handshake or attempt failure
// or just continue on straight away?
net.conn.Write(buffer[1:60])
conn.Close()
Does this guarantee delivery to client/server before Close
is called? Or will Close be called after the message sent, and potentially close the connection during the handshakes if they were too slow to complete in time ?
Does this guarantee delivery to client/server before
Close
is called?
No.
Or will
Close
be called after the message sent
Both the write and the close are queued for asynchronous execution.
and potentially close the connection during the handshakes if they were too slow to complete in time?
Close
will queue a close for the connection. If the close handshake takes too long the connection will be reset.
Nothing can "guarantee delivery" (what if the other end of the connection just crashed?). However, Write
is a blocking call, and if you check the returned error
value, you can at least know whether or not the write succeeded before you call Close
.