diff --git a/contrib/codecs/http/handler.go b/contrib/codecs/http/handler.go
index b5742441bd7b3a76d5da290505390f8c96d489ab..8ce711e7be3b5eb2aced347d1f0c6af069ce6578 100644
--- a/contrib/codecs/http/handler.go
+++ b/contrib/codecs/http/handler.go
@@ -1,12 +1,15 @@
 package http
 
 import (
+	"context"
+	"errors"
 	"net/http"
 	"sync"
 
-	"gfx.cafe/open/jrpc/pkg/server"
 	"golang.org/x/net/http2"
 	"golang.org/x/net/http2/h2c"
+
+	"gfx.cafe/open/jrpc/pkg/server"
 )
 
 func HttpHandler(s *server.Server) http.Handler {
@@ -31,9 +34,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	c := NewCodec(w, r)
 	w.Header().Set("content-type", contentType)
 	err := s.Server.ServeCodec(r.Context(), c)
-	if err != nil {
-		//	slog.Error("codec err", "err", err)
+	if err != nil && !errors.Is(err, context.Canceled) {
+		//  slog.Error("codec err", "err", err)
+		http.Error(w, "Internal Error", http.StatusInternalServerError)
 	}
-	http.Error(w, "Internal Error", http.StatusInternalServerError)
 	<-c.Closed()
 }
diff --git a/pkg/server/responsewriter.go b/pkg/server/responsewriter.go
index 09a7dff2c23441032bf5b438420b1cc2e7fac5f1..4a9df24143d293e3329588b8388b70383e22c76c 100644
--- a/pkg/server/responsewriter.go
+++ b/pkg/server/responsewriter.go
@@ -48,7 +48,7 @@ func (c *streamingRespWriter) Send(v any, e error) (err error) {
 	}
 	// only set value if value is not nil
 	if v != nil {
-		ce.v = &v
+		ce.v = v
 	}
 	err = c.cr.mu.Acquire(c.ctx, 1)
 	if err != nil {
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 2139d548d5955a1e0bc022bbf4a72fae4b170db7..047214703c2465385cfcaea39d257891bd1f0a8b 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -5,9 +5,10 @@ import (
 	"errors"
 	"sync"
 
-	"gfx.cafe/open/jrpc/pkg/jsonrpc"
 	"golang.org/x/sync/semaphore"
 
+	"gfx.cafe/open/jrpc/pkg/jsonrpc"
+
 	"gfx.cafe/util/go/bufpool"
 
 	"github.com/go-faster/jx"