diff --git a/adapters/outbound/trojan.go b/adapters/outbound/trojan.go index a87bac7fa..92fcbeeb0 100644 --- a/adapters/outbound/trojan.go +++ b/adapters/outbound/trojan.go @@ -96,6 +96,7 @@ func (t *Trojan) DialUDP(metadata *C.Metadata) (_ C.PacketConn, err error) { if err != nil { return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } + defer safeConnClose(c, err) } else { ctx, cancel := context.WithTimeout(context.Background(), tcpTimeout) defer cancel() @@ -103,16 +104,14 @@ func (t *Trojan) DialUDP(metadata *C.Metadata) (_ C.PacketConn, err error) { if err != nil { return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } + defer safeConnClose(c, err) tcpKeepAlive(c) c, err = t.instance.StreamConn(c) if err != nil { - c.Close() return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } } - defer safeConnClose(c, err) - err = t.instance.WriteHeader(c, trojan.CommandUDP, serializesSocksAddr(metadata)) if err != nil { return nil, err