read shold not be called in multiple go routine
(conn net.Conn)
| 568 | |
| 569 | //read shold not be called in multiple go routine |
| 570 | func readFrom(conn net.Conn) (buffer []byte, err error) { |
| 571 | // Read until all header bytes have been read. |
| 572 | header := make([]byte, headerSize) |
| 573 | // Read until all header bytes have been read. |
| 574 | bytesRead, totalBytesRead := 0, 0 |
| 575 | //TestPoint |
| 576 | //conn.Close() |
| 577 | for totalBytesRead < headerSize && err == nil { |
| 578 | if bytesRead, err = conn.Read(header[totalBytesRead:]); err != nil { |
| 579 | err = errors.Errorf("conn read header: %w", err) |
| 580 | return |
| 581 | } |
| 582 | totalBytesRead += bytesRead |
| 583 | } |
| 584 | |
| 585 | // Decode message size. |
| 586 | size := binary.BigEndian.Uint32(header) |
| 587 | header = nil |
| 588 | //TestPoint |
| 589 | //size = msgSizeLimit + 1 |
| 590 | if size > msgSizeLimit || size <= 0 { |
| 591 | err = errors.Errorf("SizeLimit %d size %d: %w", msgSizeLimit, size, ErrMsgOverSize) |
| 592 | return |
| 593 | } |
| 594 | |
| 595 | // Read until all message bytes have been read. |
| 596 | buffer = make([]byte, size) |
| 597 | contentBytesRead, totalContentBytesRead := 0, 0 |
| 598 | //TestPoint |
| 599 | //conn.Close() |
| 600 | for totalContentBytesRead < int(size) && err == nil { |
| 601 | if contentBytesRead, err = conn.Read(buffer[totalContentBytesRead:]); err != nil { |
| 602 | err = errors.Errorf("conn read content: %w", err) |
| 603 | return |
| 604 | } |
| 605 | totalContentBytesRead += contentBytesRead |
| 606 | } |
| 607 | return |
| 608 | } |
| 609 | |
| 610 | func (c *client) reportError(err error) { |
| 611 | select { |