【发布时间】:2016-12-08 15:54:37
【问题描述】:
我在 Golang 中有一个简单的 HTTP 服务器:
h := http.NewServeMux()
h.Handle("/somepath", MyHandler)
s := &http.Server{
Addr: "1234",
Handler: h,
}
s.ListenAndServe();
在调用者不是本地主机的情况下断开连接的最佳方法是什么?目前我正在考虑检查底层连接信息并确保 IP 地址为127.0.0.1,但这会在最终断开连接之前浪费大量资源(并运行一大堆 Go 代码)。理想情况下,我可以检测 Golang 服务器以根据 IP 地址丢弃初始 TCP SYN 数据包,而根本不创建 TCP 连接(或显示此端口正在侦听)。
这里最干净的道路是什么?
【问题讨论】:
-
真正做到你所要求的最干净的路径是使用主机防火墙。 Go 看不到 TCP SYN 数据包,这是由操作系统处理的,
-
@JimB 那么我可以(从在 Linux 上运行的 Go)脱壳并创建一个 IPTable 规则或其他东西,然后再绑定并监听我的端口吗?
-
为什么不
http.ListenAndServe("localhost:80", nil)?那只会将服务绑定到本地主机。 -
@VonC 如果这是答案,那么我会接受。
标签: linux http go tcp localhost