@@ -117,6 +117,8 @@ func (mc *mysqlConn) writePacket(data []byte) error {
117117 // Write packet
118118 if mc .writeTimeout > 0 {
119119 if err := mc .netConn .SetWriteDeadline (time .Now ().Add (mc .writeTimeout )); err != nil {
120+ mc .log (err )
121+ mc .cleanup ()
120122 return err
121123 }
122124 }
@@ -296,7 +298,7 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
296298 data , err := mc .buf .takeBuffer (pktLen + 4 )
297299 if err != nil {
298300 // cannot take the buffer. Something must be wrong with the connection
299- mc .cleanup () // Avoid repeated "busy buffer" errors.
301+ mc .cleanup ()
300302 return err
301303 }
302304
@@ -515,32 +517,33 @@ func (mc *okHandler) readResultOK() error {
515517}
516518
517519// Result Set Header Packet
518- // http ://dev.mysql.com/doc/internals/en/com-query-response .html#packet-ProtocolText::Resultset
520+ // https ://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_query_response .html
519521func (mc * okHandler ) readResultSetHeaderPacket () (int , error ) {
520522 // handleOkPacket replaces both values; other cases leave the values unchanged.
521523 mc .result .affectedRows = append (mc .result .affectedRows , 0 )
522524 mc .result .insertIds = append (mc .result .insertIds , 0 )
523525
524526 data , err := mc .conn ().readPacket ()
525- if err == nil {
526- switch data [0 ] {
527-
528- case iOK :
529- return 0 , mc .handleOkPacket (data )
527+ if err != nil {
528+ return 0 , err
529+ }
530530
531- case iERR :
532- return 0 , mc .conn ().handleErrorPacket (data )
531+ switch data [0 ] {
532+ case iOK :
533+ return 0 , mc .handleOkPacket (data )
533534
534- case iLocalInFile :
535- return 0 , mc .handleInFileRequest (string (data [1 :]))
536- }
535+ case iERR :
536+ return 0 , mc .conn ().handleErrorPacket (data )
537537
538- // column count
539- num , _ , _ := readLengthEncodedInteger (data )
540- // ignore remaining data in the packet. see #1478.
541- return int (num ), nil
538+ case iLocalInFile :
539+ return 0 , mc .handleInFileRequest (string (data [1 :]))
542540 }
543- return 0 , err
541+
542+ // column count
543+ // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_query_response_text_resultset.html
544+ num , _ , _ := readLengthEncodedInteger (data )
545+ // ignore remaining data in the packet. see #1478.
546+ return int (num ), nil
544547}
545548
546549// Error Packet
0 commit comments