Go 如何处理低级net/http错误?

Go 如何处理低级net/http错误?,go,httpserver,Go,Httpserver,在我的golang net/http服务器上,偶尔会出现如下错误 2017/08/04 15:06:25 http:Accept错误:Accept tcp 127.0.0.1:80:Accept 4:打开的文件太多;在1s内重试 在stderr上。某个地方可能有一个bug缺少Close(),但这不是我的问题所在 我想知道的是,是否有一种简单的方法可以在go中以编程方式捕获这些或类似的错误?我只知道这个错误,因为它已被记录ListendServe()不返回错误。是否有其他方法可以获得此类错误的通知

在我的golang net/http服务器上,偶尔会出现如下错误

2017/08/04 15:06:25 http:Accept错误:Accept tcp 127.0.0.1:80:Accept 4:打开的文件太多;在1s内重试

在stderr上。某个地方可能有一个bug缺少
Close()
,但这不是我的问题所在

我想知道的是,是否有一种简单的方法可以在go中以编程方式捕获这些或类似的错误?我只知道这个错误,因为它已被记录<代码>ListendServe()不返回错误。是否有其他方法可以获得此类错误的通知?具体来说:如何访问底层侦听器的错误
ListenAndServe()
不会从底层侦听器返回错误(至少不是所有错误)


(已编辑)

net/http将所有错误记录到。您可以使用它来截取日志消息,但不清楚您可以通过编程从这些日志中提取多少数据。

如果您看看
(*http.Server).service()
是如何实现的,很明显,您可以定义自己的类来实现
net.Listener
,并将其提供给
service()
函数,而不是使用
ListenAndServe()
,后者将默认侦听器放在那里。使其在出错时出现死机,然后从代码中的死机中恢复,或者实现任何其他错误处理逻辑。

您指的是什么其他“类似于这些的错误”?您是否特别想要拦截
接受
呼叫,如果您确实想要,除了记录错误并重试之外,您还会对所述错误做些什么?可能的重复我甚至会比JimB更进一步,并说此日志条目完全符合它的要求:您是否检查了是否关闭了所有文件,并可能检查了服务器为运行进程的用户提供的最大打开文件描述符数操作系统。根本原因解决了,我称之为任务完成。@JimB是的,拦截
Accept()
就是我想要的。一旦抓到其中一个,我就会终止程序。在我的例子中,这比重试要好,因为错误可能会持续。在导致这些错误的实际错误被修复之前,终止是一个很好的解决方法。@MarkusWMahlberg是正确的,但在根本原因被消除之前,我需要一个解决方法。问题不是从
Server()
返回的错误,而是只记录的错误。在这种情况下发生的是
http.listendserve()
创建默认的
http.Server
并运行
Server.service()
提供默认的
net.Listener
。然后,如果发生
accept错误
(在侦听器内部),则服务器将打印该错误。我建议您定义自己的侦听器,它只围绕默认的
net.Listener
进行包装,并对错误执行自定义逻辑。我可能应该编辑我的答案,让它更清楚。这有助于解决
错误
s;这个问题不是关于错误的。这实际上是正确的答案。很抱歉,由于我提到了日志,造成了混乱。