send_queue.go 634 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package quic
  2. type sendQueue struct {
  3. queue chan *packedPacket
  4. closeChan chan struct{}
  5. conn connection
  6. }
  7. func newSendQueue(conn connection) *sendQueue {
  8. s := &sendQueue{
  9. conn: conn,
  10. closeChan: make(chan struct{}),
  11. queue: make(chan *packedPacket, 1),
  12. }
  13. return s
  14. }
  15. func (h *sendQueue) Send(p *packedPacket) {
  16. h.queue <- p
  17. }
  18. func (h *sendQueue) Run() error {
  19. var p *packedPacket
  20. for {
  21. select {
  22. case <-h.closeChan:
  23. return nil
  24. case p = <-h.queue:
  25. }
  26. if err := h.conn.Write(p.raw); err != nil {
  27. return err
  28. }
  29. p.buffer.Release()
  30. }
  31. }
  32. func (h *sendQueue) Close() {
  33. close(h.closeChan)
  34. }