session: ignores eose if stream; unify send and message loop into single for/select

This commit is contained in:
Jay
2026-05-17 11:43:11 -04:00
parent 84e49d611f
commit a6922182d6
2 changed files with 55 additions and 22 deletions
+13 -12
View File
@@ -223,21 +223,22 @@ func (s *session) run() {
sent := make(chan error, 1)
go func() { sent <- s.send(s.req) }()
select {
case err := <-sent:
if err != nil {
s.terminate(termSendFailed)
for {
select {
case err := <-sent:
if err != nil {
s.terminate(termSendFailed)
return
}
case <-s.done:
s.terminate(termExternal)
return
case <-s.ctx.Done():
s.terminate(termExternal)
return
case <-s.eose:
}
case <-s.done:
s.terminate(termExternal)
return
case <-s.ctx.Done():
s.terminate(termExternal)
return
}
// TODO: main message loop (eose, closed, done, ctx) -- deferred to later tests
}
func (s *session) Close() {