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

Method handleConnection

agent/boundarylogproxy/proxy.go:143–184  ·  view source on GitHub ↗
(ctx context.Context, conn net.Conn)

Source from the content-addressed store, hash-verified

141}
142
143func (s *Server) handleConnection(ctx context.Context, conn net.Conn) {
144 defer s.wg.Done()
145
146 ctx, cancel := context.WithCancel(ctx)
147 defer cancel()
148
149 s.wg.Add(1)
150 go func() {
151 defer s.wg.Done()
152 <-ctx.Done()
153 _ = conn.Close()
154 }()
155
156 // This is intended to be a sane starting point for the read buffer size.
157 // It may be grown by codec.ReadMessage if necessary.
158 const initBufSize = 1 << 10
159 buf := make([]byte, initBufSize)
160
161 for {
162 select {
163 case <-ctx.Done():
164 return
165 default:
166 }
167
168 var err error
169 var msg proto.Message
170 msg, buf, err = codec.ReadMessage(conn, buf)
171 switch {
172 case errors.Is(err, io.EOF) || errors.Is(err, net.ErrClosed):
173 return
174 case errors.Is(err, codec.ErrUnsupportedTag) || errors.Is(err, codec.ErrMessageTooLarge):
175 s.logger.Warn(ctx, "read frame error", slog.Error(err))
176 return
177 case err != nil:
178 s.logger.Warn(ctx, "read message error", slog.Error(err))
179 continue
180 }
181
182 s.handleMessage(ctx, msg)
183 }
184}
185
186func (s *Server) handleMessage(ctx context.Context, msg proto.Message) {
187 switch m := msg.(type) {

Callers 1

acceptLoopMethod · 0.95

Calls 7

handleMessageMethod · 0.95
ReadMessageFunction · 0.92
AddMethod · 0.65
CloseMethod · 0.65
DoneMethod · 0.45
IsMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected