|
|
@@ -151,14 +151,15 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- requestDone := signal.ExecuteAsync(func() error {
|
|
|
+ responseDone := signal.ExecuteAsync(func() error {
|
|
|
bufferedWriter := buf.NewBufferedWriter(conn)
|
|
|
responseWriter, err := WriteTCPResponse(request, bufferedWriter)
|
|
|
if err != nil {
|
|
|
return errors.New("failed to write response").Base(err).Path("Shadowsocks", "Server")
|
|
|
}
|
|
|
|
|
|
- payload, err := ray.InboundOutput().Read()
|
|
|
+ mergeReader := buf.NewMergingReader(ray.InboundOutput())
|
|
|
+ payload, err := mergeReader.Read()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -171,18 +172,17 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- if err := buf.PipeUntilEOF(timer, ray.InboundOutput(), responseWriter); err != nil {
|
|
|
+ if err := buf.PipeUntilEOF(timer, mergeReader, responseWriter); err != nil {
|
|
|
return errors.New("failed to transport all TCP response").Base(err).Path("Shadowsocks", "Server")
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
})
|
|
|
|
|
|
- responseDone := signal.ExecuteAsync(func() error {
|
|
|
+ requestDone := signal.ExecuteAsync(func() error {
|
|
|
defer ray.InboundInput().Close()
|
|
|
|
|
|
- mergeReader := buf.NewMergingReader(bodyReader)
|
|
|
- if err := buf.PipeUntilEOF(timer, mergeReader, ray.InboundInput()); err != nil {
|
|
|
+ if err := buf.PipeUntilEOF(timer, bodyReader, ray.InboundInput()); err != nil {
|
|
|
return errors.New("failed to transport all TCP request").Base(err).Path("Shadowsocks", "Server")
|
|
|
}
|
|
|
return nil
|