@@ -199,8 +199,10 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
199199 }
200200 }
201201
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
204206 }
205207 dataLen -= payloadLen
206208 packets = packets [payloadLen :]
@@ -211,7 +213,7 @@ func (c *compIO) writePackets(packets []byte) (int, error) {
211213
212214// writeCompressedPacket writes a compressed packet with header.
213215// 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 ) {
215217 mc := c .mc
216218 comprLength := len (data ) - 7
217219 if debugTrace {
@@ -225,11 +227,11 @@ func (c *compIO) writeCompressedPacket(data []byte, uncompressedLen int) error {
225227 data [3 ] = mc .compressSequence
226228 putUint24 (data [4 :7 ], uncompressedLen )
227229
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
231233 }
232234
233235 mc .compressSequence ++
234- return nil
236+ return n , nil
235237}
0 commit comments