Plat 592 writable sources

The goal here is to enable the client code to know the entire message for which an error occurred and to leave it the responsibility of the actual error handling. Here, since the message is known and kept in memory, it cost nothing to pass it as parameter. Then the "writtenSize" that is passed does indicate how many bytes have actually been transferred.
From there, the client code can thus choose to:
- parse the unsent message and for example provided a meaningful error message
- retry to send the message
- retry to send only the missing bytes
- discard it completely