@@ -199,8 +199,10 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
199
199
}
200
200
}
201
201
202
- if err := c .writeCompressedPacket (buf .Bytes (), uncompressedLen ); err != nil {
203
- return 0 , err
202
+ if n , err := c .writeCompressedPacket (buf .Bytes (), uncompressedLen ); err != nil {
203
+ // To allow returning ErrBadConn when sending really 0 bytes, we sum
204
+ // up compressed bytes that is returned by underlying Write().
205
+ return totalBytes - len (packets ) + n , err
204
206
}
205
207
dataLen -= payloadLen
206
208
packets = packets [payloadLen :]
@@ -211,7 +213,7 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
211
213
212
214
// writeCompressedPacket writes a compressed packet with header.
213
215
// data should start with 7 size space for header followed by payload.
214
- func (c * compIO ) writeCompressedPacket (data []byte , uncompressedLen int ) error {
216
+ func (c * compIO ) writeCompressedPacket (data []byte , uncompressedLen int ) ( int , error ) {
215
217
mc := c .mc
216
218
comprLength := len (data ) - 7
217
219
if debugTrace {
@@ -225,11 +227,11 @@ func (c *compIO) writeCompressedPacket(data []byte, uncompressedLen int) error {
225
227
data [3 ] = mc .compressSequence
226
228
putUint24 (data [4 :7 ], uncompressedLen )
227
229
228
- if _ , err := mc .writeWithTimeout (data ); err != nil {
229
- mc .log ("writing compressed packet:" , err )
230
- return err
230
+ if n , err := mc .writeWithTimeout (data ); err != nil {
231
+ // mc.log("writing compressed packet:", err)
232
+ return n , err
231
233
}
232
234
233
235
mc .compressSequence ++
234
- return nil
236
+ return n , nil
235
237
}
0 commit comments