如何处理低级网络/ http错误?
问题描述:
用我golang网/ HTTP服务器,我偶尔会得到如下的错误如何处理低级网络/ http错误?
2017/08/04 15:06:25 http: Accept error: accept tcp 127.0.0.1:80: accept4: too many open files; retrying in 1s
的标准错误。有可能是一个缺少Close()
某处的错误,但这是而不是我的问题是关于。
我想知道的是,是否有一种简单的方法来以编程方式捕获这些或类似的错误?
我只知道这个错误,因为它被记录了。
具体来说:我如何访问底层侦听器的错误? ListenAndServe()
不会返回错误。有没有其他的方式来得到像这样的错误的通知?
ListenAndServe()
不会从底层侦听器返回错误(至少不是所有这些错误)。
(编辑)
答
如果你看一下(*http.Server).Serve()
是如何实现的here,很显然,你可以定义自己的类,它实现net.Listener
,并把它交给Serve()
功能,而不是使用ListenAndServe()
,这使一个默认的监听器那里。使其出现错误panic
,然后在代码中出现recover
,或执行任何其他错误处理逻辑。
你指的是什么其他“类似这些错误”?你是否特意要拦截“Accept”调用,如果你这样做了,除了记录和重试之外,你甚至会怎么处理这个错误? – JimB
可能的重复[任何方式获取堆栈跟踪'http:response.WriteHeader在劫持连接'错误?](https://*.com/questions/43547565/any-way-to-get-a-stack -trace-for-http-response-writeheader-on-hijacked-connect) – Flimzy
我甚至比JimB更进一步,并说这个日志条目确实* whatvit应该做的事情:你检查你是否关闭所有文件,并可能检查为操作系统运行该进程的用户提供的打开文件描述符的最大数量。解决的根本原因是我所称的任务完成。 –