go:http 服务器在 osx 上不起作用

该示例性的HTTP服务器并不为我工作。源代码:


package main


import (

    "fmt"

    "net/http"

)


func handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])

}


func main() {

    http.HandleFunc("/", handler)

    http.ListenAndServe("127.0.0.1:8080", nil)

}

当我尝试连接时,我得到的是:


$ curl 127.0.0.1:8080

curl: (7) Failed to connect to 127.0.0.1 port 8080: Operation timed out

$ nc -v -G 5 127.0.0.1 8080

nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Operation timed out

虽然 nc 尝试连接 tcpdump 仅显示 SYN 数据包:


$ tcpdump -i lo0 port 8080

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes

18:21:30.906638 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569352 ecr 0,sackOK,eol], length 0

18:21:31.006824 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569452 ecr 0,sackOK,eol], length 0

18:21:31.106989 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569552 ecr 0,sackOK,eol], length 0

18:21:31.208141 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569653 ecr 0,sackOK,eol], length 0

18:21:31.308288 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569753 ecr 0,sackOK,eol], length 0

18:21:31.408336 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569853 ecr 0,sackOK,eol], length 0



当我运行 nc 时什么也没有出现,所以它甚至没有注意到连接尝试。


我没有启用防火墙,其他一切正常,只有 Go 程序有这个问题(特别是我不能使用 docker-machine)


我如何解决它?


编辑:我假设 #Err35 是:


#define EDEADLK     35  /* Resource deadlock would occur */

……哇?


翻翻过去那场雪
浏览 241回答 3
3回答

侃侃尔雅

我想查看“ifconfig -a”的输出。这闻起来像是本地配置问题;我无法在 OS X 10.11.4, Go 1.6 上重现这个我的 WAG 是隧道设备实际上使用的是 127.0.0.1 而不是环回设备。

阿晨1998

我修好了它!我记得早些时候我试图增加我机器上的连接限制并应用这里描述的更改:https : //apple.stackexchange.com/a/169606恢复它们解决了这个问题。这就是帮助:sudo rm /etc/sysctl.confsudo sysctl kern.ipc.somaxconn=128sudo rm /Library/LaunchDaemons/limit.maxproc.plistsudo rm /Library/LaunchDaemons/limit.maxfiles.plist顺便说一句:经过更多调查后,我发现:问题是 accept() 系统调用每次都返回 EAGAIN 但不接受任何连接对于 C 和 Java 程序中的非阻塞连接,它的行为相同但我仍然不知道它到底为什么坏了。

慕容3067478

我确定你检查过这个,但是你有没有打开数据包过滤(pfctl)或其他一些防火墙?请参阅https://superuser.com/questions/505128/deny-access-to-a-port-from-localhost-on-osx
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go