MCPcopy Index your code
hub / github.com/coder/coder / sendLoop

Method sendLoop

vpn/serdes.go:66–95  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

64}
65
66func (s *serdes[S, _, _]) sendLoop() {
67 s.logger.Debug(s.ctx, "starting sendLoop")
68 defer s.closeIdempotent()
69 for {
70 select {
71 case <-s.ctx.Done():
72 s.logger.Debug(s.ctx, "sendLoop canceled", slog.Error(s.ctx.Err()))
73 return
74 case msg, ok := <-s.sendCh:
75 if !ok {
76 s.logger.Debug(s.ctx, "sendCh closed")
77 return
78 }
79 mb, err := proto.Marshal(msg)
80 if err != nil {
81 s.logger.Critical(s.ctx, "failed to marshal message", slog.Error(err))
82 return
83 }
84 // #nosec G115 - Safe conversion as protobuf message length is expected to be within uint32 range
85 if err := binary.Write(s.conn, binary.BigEndian, uint32(len(mb))); err != nil {
86 s.logger.Debug(s.ctx, "failed to write length", slog.Error(err))
87 return
88 }
89 if _, err := s.conn.Write(mb); err != nil {
90 s.logger.Debug(s.ctx, "failed to write message", slog.Error(err))
91 return
92 }
93 }
94 }
95}
96
97func (s *serdes[_, _, _]) closeIdempotent() {
98 s.closeOnce.Do(func() {

Callers 1

startMethod · 0.95

Calls 6

closeIdempotentMethod · 0.95
ErrMethod · 0.80
WriteMethod · 0.65
DoneMethod · 0.45
ErrorMethod · 0.45
MarshalMethod · 0.45

Tested by

no test coverage detected