ListenAndServe返回net.DNSError错误:”未提供节点名或服务名”

huangapple go评论122阅读模式
英文:

ListenAndServe returns net.DNSError "nodename nor servname provided"

问题

我正在尝试编写一个Go的HTTP服务器,但是当我尝试监听传入连接时遇到了问题。

硬件设置:MacOS Sierra 10.12.4,docker 17.03

我有一个yml文件,将打开一个.phpmyadmin和sql:

  1. mysql:
  2. extends:
  3. service: mysql-5.7
  4. ports:
  5. - "3306:3306"
  6. phpmyadmin:
  7. image: phpmyadmin/phpmyadmin:latest
  8. links:
  9. - "mysql:db"
  10. ports:
  11. - "8080:80"

这似乎工作正常。

之后,我编写了一个Go文件来连接并监听连接:

  1. stack := negroni.New()
  2. stack.Use(cors.New(cors.Options{
  3. AllowedOrigins: []string{"*"},
  4. AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
  5. AllowedHeaders: []string{"*"},
  6. AllowCredentials: true,
  7. }))
  8. external := &http.Server{
  9. Addr: "10001",
  10. Handler: stack,
  11. }
  12. // 启动服务器,监听传入连接。
  13. go func() {
  14. err = external.ListenAndServe()
  15. if err != nil && err != http.ErrServerClosed {
  16. level.Error(logger).Log("msg", "error while listening", "err", err)
  17. os.Exit(1)
  18. }
  19. }()

这将生成以下错误:

  1. level=error time=2017-06-19T09:28:14.726843314Z app="Falbala" env=local pid=1084 host=P5RO-PORT367.local msg="error while listening" err="listen tcp: lookup tcp/10001": nodename nor servname provided, or not known

有什么想法吗?谢谢。

英文:

<br>
I am trying to write a go http server but I have an issue when I try to listen to incoming connections. <br>
HW setup: MacOS Sierra 10.12.4, docker 17.03
<br>I have a yml file that will open a . phpmyadmin and sql:

  1. mysql:
  2. extends:
  3. service: mysql-5.7
  4. ports:
  5. - &quot;3306:3306&quot;
  6. phpmyadmin:
  7. image: phpmyadmin/phpmyadmin:latest
  8. links:
  9. - &quot;mysql:db&quot;
  10. ports:
  11. - &quot;8080:80&quot;

This seems to work fine.
After this I wrote a go file to connect and listen to connections:

  1. stack := negroni.New()
  2. stack.Use(cors.New(cors.Options{
  3. AllowedOrigins: []string{&quot;*&quot;},
  4. AllowedMethods: []string{&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;, &quot;DELETE&quot;},
  5. AllowedHeaders: []string{&quot;*&quot;},
  6. AllowCredentials: true,
  7. }))
  8. external := &amp;http.Server{
  9. Addr: &quot;10001&quot;,
  10. Handler: stack,
  11. }
  12. // Start the server, listening for incomming connections.
  13. go func() {
  14. err = external.ListenAndServe()
  15. if err != nil &amp;&amp; err != http.ErrServerClosed {
  16. level.Error(logger).Log(&quot;msg&quot;, &quot;error while listening&quot;, &quot;err&quot;, err)
  17. os.Exit(1)
  18. }
  19. }()

This will generate the error:

> level=error time=2017-06-19T09:28:14.726843314Z app=“Falbala” env=local pid=1084 host=P5RO-PORT367.local msg="error while listening" err="listen tcp: lookup tcp/10001”: nodename nor servname provided, or not known"

Any ideas?<br>
Thank you

答案1

得分: 2

根据文档,地址值应该是一个字符串。

  1. // ListenAndServe 总是返回非nil的错误。
  2. func ListenAndServe(addr string, handler Handler) error {
  3. server := &Server{Addr: addr, Handler: handler}
  4. return server.ListenAndServe()
  5. }

你可以试试看吗?

  1. external := http.Server{
  2. Addr: ":10001",
  3. Handler: stack,
  4. }
英文:

From the documentation, address value should be a string.

  1. // ListenAndServe always returns a non-nil error.
  2. func ListenAndServe(addr string, handler Handler) error {
  3. server := &amp;Server{Addr: addr, Handler: handler}
  4. return server.ListenAndServe()
  5. }

Can you try?

  1. external := http.Server{
  2. Addr: &quot;:10001&quot;,
  3. Handler: stack,
  4. }

huangapple
  • 本文由 发表于 2017年6月19日 17:33:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/44626931.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定