{"record":{"id":"3cf7c0d0b2558c83","repo":"XTLS/Xray-core","slug":"no-network-specified","errorCode":null,"errorMessage":"no network specified","messagePattern":"no network specified","errorType":"validation","errorClass":"errors.Error","httpStatus":null,"severity":"error","filePath":"proxy/dokodemo/dokodemo.go","lineNumber":46,"sourceCode":"\t\t\treturn d.Init(config.(*Config), pm, session.SockoptFromContext(ctx))\n\t\t})\n\t\treturn d, err\n\t}))\n}\n\ntype DokodemoDoor struct {\n\tpolicyManager  policy.Manager\n\tconfig         *Config\n\trewriteAddress net.Address\n\trewritePort    net.Port\n\tportMap        map[string]string\n\tsockopt        *session.Sockopt\n}\n\n// Init initializes the DokodemoDoor instance with necessary parameters.\nfunc (d *DokodemoDoor) Init(config *Config, pm policy.Manager, sockopt *session.Sockopt) error {\n\tif len(config.AllowedNetworks) == 0 {\n\t\treturn errors.New(\"no network specified\")\n\t}\n\td.config = config\n\td.rewriteAddress = config.GetPredefinedAddress()\n\td.rewritePort = net.Port(config.RewritePort)\n\td.portMap = config.PortMap\n\td.policyManager = pm\n\td.sockopt = sockopt\n\n\treturn nil\n}\n\n// Network implements proxy.Inbound.\nfunc (d *DokodemoDoor) Network() []net.Network {\n\tif slices.Contains(d.config.AllowedNetworks, net.Network_TCP) {\n\t\treturn append(d.config.AllowedNetworks, net.Network_UNIX)\n\t}\n\treturn d.config.AllowedNetworks\n}","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/proxy/dokodemo/dokodemo.go#L28-L64","documentation":"DokodemoDoor.Init rejects a config whose AllowedNetworks list is empty. The dokodemo-door inbound must be told which networks (tcp/udp) to accept; an empty NetworkList means the listener would have no traffic domain. This error surfaces at server construction, i.e. it is one of the causes behind \"failed to create server\" (error 548).","triggerScenarios":"A dokodemo-door inbound JSON/TOML/YAML config where the \"network\" field is omitted or set to an empty/unparsable value, e.g. {\"protocol\":\"dokodemo-door\",\"port\":1080} with no \"settings.network\".","commonSituations":"Minimal configs copied from tutorials that skip settings; \"network\": \"\" or a typo like \"TCP\" (parser is case-sensitive to valid tokens) producing an empty list; JSON-to-TOML conversion dropping the field.","solutions":["Add \"network\" to the inbound settings with at least one of tcp or udp","Use explicit lowercase tokens: \"tcp\", \"udp\", or \"tcp,udp\"","Validate the whole config boots before deploying (xray run -test or a staging start)","Check the config schema docs for dokodemo-door settings if unsure of accepted values"],"exampleFix":"// before\n{\"protocol\":\"dokodemo-door\",\"port\":1080,\"settings\":{}}\n\n// after\n{\"protocol\":\"dokodemo-door\",\"port\":1080,\"settings\":{\"network\":\"tcp,udp\"}}","handlingStrategy":"validation","validationCode":"func validDokodemo(cfg *dokodemo.Config) bool { return len(cfg.AllowedNetworks) > 0 }\n\nif !validDokodemo(conf) { return errors.New(\"set settings.network to tcp and/or udp\") }","typeGuard":null,"tryCatchPattern":"if err := d.Init(config, pm, sockopt); err != nil {\n    if err.Error() == \"no network specified\" { config.AllowedNetworks = []string{\"tcp\", \"udp\"}; err = d.Init(config, pm, sockopt) }\n    if err != nil { return err }\n}","preventionTips":["Template dokodemo inbounds always include settings.network","Validate inbound settings with a config linter before deploy","Check schema docs when converting between JSON/TOML/YAML"],"tags":["go","xray","dokodemo","inbound","config"],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}