packetHandler is a long running goroutine that processes messages received over the packet interface, but is decoupled from the listener to avoid blocking the listener which may cause ping/ack messages to be delayed.
()
| 507 | // over the packet interface, but is decoupled from the listener to avoid |
| 508 | // blocking the listener which may cause ping/ack messages to be delayed. |
| 509 | func (m *Memberlist) packetHandler() { |
| 510 | for { |
| 511 | select { |
| 512 | case <-m.handoffCh: |
| 513 | for { |
| 514 | msg, ok := m.getNextMessage() |
| 515 | if !ok { |
| 516 | break |
| 517 | } |
| 518 | msgType := msg.msgType |
| 519 | buf := msg.buf |
| 520 | from := msg.from |
| 521 | |
| 522 | switch msgType { |
| 523 | case suspectMsg: |
| 524 | m.handleSuspect(buf, from) |
| 525 | case aliveMsg: |
| 526 | m.handleAlive(buf, from) |
| 527 | case deadMsg: |
| 528 | m.handleDead(buf, from) |
| 529 | case userMsg: |
| 530 | m.handleUser(buf, from) |
| 531 | default: |
| 532 | m.logger.Printf("[ERR] memberlist: Message type (%d) not supported %s (packet handler)", msgType, LogAddress(from)) |
| 533 | } |
| 534 | } |
| 535 | |
| 536 | case <-m.shutdownCh: |
| 537 | return |
| 538 | } |
| 539 | } |
| 540 | } |
| 541 | |
| 542 | func (m *Memberlist) handleCompound(buf []byte, from net.Addr, timestamp time.Time) { |
| 543 | // Decode the parts |
no test coverage detected