diff --git a/internal/transport/http2_server.go b/internal/transport/http2_server.go index 0956b500c18e..f64b602b87e8 100644 --- a/internal/transport/http2_server.go +++ b/internal/transport/http2_server.go @@ -1065,6 +1065,9 @@ func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) e if _, ok := err.(ConnectionError); ok { return err } + if s.ctx.Err() != nil { + return ContextErr(s.ctx.Err()) + } // TODO(mmukhi, dfawley): Make sure this is the right code to return. return status.Errorf(codes.Internal, "transport: %v", err) } diff --git a/test/end2end_test.go b/test/end2end_test.go index 5fa36b1a2b11..766d568b9277 100644 --- a/test/end2end_test.go +++ b/test/end2end_test.go @@ -4964,8 +4964,8 @@ func testClientSendDataAfterCloseSend(t *testing.T, e env) { } if err := stream.SendMsg(nil); err == nil { t.Error("expected error sending message on stream after stream closed due to illegal data") - } else if status.Code(err) != codes.Internal { - t.Errorf("expected internal error, instead received '%v'", err) + } else if status.Code(err) != codes.Canceled { + t.Errorf("expected cancel error, instead received '%v'", err) } return nil }}