|
|
@@ -2,6 +2,9 @@ package outbound
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
+ "errors"
|
|
|
+ "io"
|
|
|
+ "os"
|
|
|
|
|
|
"github.com/xtls/xray-core/app/proxyman"
|
|
|
"github.com/xtls/xray-core/common"
|
|
|
@@ -141,7 +144,13 @@ func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) {
|
|
|
common.Interrupt(link.Writer)
|
|
|
}
|
|
|
} else {
|
|
|
- if err := h.proxy.Process(ctx, link, h); err != nil {
|
|
|
+ err := h.proxy.Process(ctx, link, h)
|
|
|
+ if err != nil {
|
|
|
+ if errors.Is(err, io.EOF) || errors.Is(err, io.ErrClosedPipe) || errors.Is(err, context.Canceled) {
|
|
|
+ err = nil
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
// Ensure outbound ray is properly closed.
|
|
|
err := newError("failed to process outbound traffic").Base(err)
|
|
|
session.SubmitOutboundErrorToOriginator(ctx, err)
|