|
@@ -168,28 +168,9 @@ func New(ctx context.Context, options option.Options) (*Box, error) {
|
|
|
}
|
|
|
|
|
|
func (s *Box) Start() error {
|
|
|
- err := s.router.Start()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- for i, in := range s.inbounds {
|
|
|
- err = in.Start()
|
|
|
- if err != nil {
|
|
|
- for g := 0; g < i; g++ {
|
|
|
- s.inbounds[g].Close()
|
|
|
- }
|
|
|
- var tag string
|
|
|
- if in.Tag() == "" {
|
|
|
- tag = F.ToString(i)
|
|
|
- } else {
|
|
|
- tag = in.Tag()
|
|
|
- }
|
|
|
- return E.Cause(err, "initialize inbound/", in.Type(), "[", tag, "]")
|
|
|
- }
|
|
|
- }
|
|
|
for i, out := range s.outbounds {
|
|
|
if starter, isStarter := out.(common.Starter); isStarter {
|
|
|
- err = starter.Start()
|
|
|
+ err := starter.Start()
|
|
|
if err != nil {
|
|
|
for _, in := range s.inbounds {
|
|
|
common.Close(in)
|
|
@@ -207,6 +188,25 @@ func (s *Box) Start() error {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ err := s.router.Start()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for i, in := range s.inbounds {
|
|
|
+ err = in.Start()
|
|
|
+ if err != nil {
|
|
|
+ for g := 0; g < i; g++ {
|
|
|
+ s.inbounds[g].Close()
|
|
|
+ }
|
|
|
+ var tag string
|
|
|
+ if in.Tag() == "" {
|
|
|
+ tag = F.ToString(i)
|
|
|
+ } else {
|
|
|
+ tag = in.Tag()
|
|
|
+ }
|
|
|
+ return E.Cause(err, "initialize inbound/", in.Type(), "[", tag, "]")
|
|
|
+ }
|
|
|
+ }
|
|
|
if s.clashServer != nil {
|
|
|
err = s.clashServer.Start()
|
|
|
if err != nil {
|