问题现象:
我们有一个服务使用了listen端口,等到锁屏后一段时间,再切到前台后,虽然还在poll socket,但是一直
收不到事件。fd是有效的
1. 我用c代码写了一个绑定和监听的程序,当listen的fd无法接收数据时,用这个程序绑定 侦听都是成功的,并没有报端口已经被绑定的错误。
推测是侦听的socket被系统关闭了。
2. 买了一个能越狱的手机,用netstat一看,果然之前我们侦听的端口已经不存在了。
这个问题的原因就是因为ios的 “设置-- 通用 ---自动锁定时间”,当这个时间一到,侦听的端口就回被ios回收。系统服务
需要重新启动才能正常。
这种情况极其罕见,一般的应用并不需要做端口的侦听,爬了很多网页最后发现在github的 CocoaHTTPServer上也有人反馈
类似的问题。解决方法也是在切前后台的时候重启服务。
cocoaHTTPServer链接:
iOS server socket dies on screen lock · Issue #10 · robbiehanson/CocoaHTTPServer · GitHub
iOS server socket dies on screen lock · Issue #10 · robbiehanson/CocoaHTTPServer · GitHub
网友评论