Golang关闭后保持文件服务套接字打开

时间:2016-06-22 22:11:54

标签: linux macos sockets go

我在golang中创建了一个文件服务器,并在Listener上调用Close()方法。

当我尝试在新的Web连接上访问端口时,似乎Socket已关闭,我无法访问该网站。

如果我使用已经建立的连接引用该页面,该页面会重新加载,就好像套接字从未关闭一样?我甚至还能浏览文件系统。

我注意到在30分钟左右后,插座似乎强行关闭。

我是否缺少强制套接字删除所有现有连接以阻止人们访问文件服务器的东西?

SELECT CAST(ISNULL(REPLACE(REPLACE(a.[BPOFmv], '$',''),',',''), 0) AS DECIMAL(18,2)) AS BPOFmv 
FROM [MyTables]

1 个答案:

答案 0 :(得分:2)

无法关闭空闲的HTTP / 1.1或HTTP2连接。在https://golang.org/issue/9478有一个未解决的问题,但没有立即计划。请注意,关闭侦听器后,服务器将不接受新连接;你正在重复使用相同的连接。

如果要强行关闭所有连接,则需要使用http.Server ConnState自行进行簿记,以跟踪活动的TCP连接。

您还可以让处理程序在每个响应中设置Connection: close,但如果客户端需要发出多个请求,那么这将使您的http服务器效率降低。