tls包的握手出现问题

jqf00007 · · 2989 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

``` func connect_apns(procid int)(error, *tls.Conn){ cert, err := tls.LoadX509KeyPair(certpath, keypath) if err != nil { fmt.Printf("error: %s ,procid:%d\n", err.Error(), procid) return err,nil } // 连接到 APNS conn, err := net.Dial("tcp", "gateway.push.apple.com:2195") if err != nil { fmt.Printf("tcp error: %s\n", err.Error()) return err,nil } conf := &tls.Config {InsecureSkipVerify: true, Certificates: []tls.Certificate{cert}, } tlsconn := tls.Client(conn, conf) log.Info("ready to handshake procid:%d",procid) // 强制握手,以确认验证身份握手被处理 err = tlsconn.Handshake() log.Info("complete handshake procid:%d",procid) if err != nil { tlsconn.Close() fmt.Printf("tls error: %s\n", err.Error()) return err,nil } return nil,tlsconn } ``` 简介:这个函数是用来连接苹果推送服务器apns的; 调用情况:外层是个死循环,一旦io出现问题、读写超时或者io到达一定次数就调用该函数重连; ``` func push{ for{ connect_apns(); for{ //IO操作 } CLOSE: //关闭连接 } } ``` 现在我有多个push并发,每天一个push协程平均重连次数大概一千多; 但是这个程序运行2-3天后,就开始出现协程不工作的现象,加了调试信息,发现是在握手时候的问题:看日志的时候发现,tlsconn.Handshake()前面的那条日志输出了,但是后面那条没记录,然后这条协程就不工作了。 现在不确定是阻塞住了,还是协程结束了;如果是协程结束了还好,我可以定时检测一下,如果挂了,就重新开一个协程;但是如果是阻塞了,重新开协程会导致协程泄露 大家谁遇到过这种情况,给解答一下,或者提供一下思路.

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2989 次点击  
加入收藏 微博
2 回复  |  直到 2016-01-07 06:42:45
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传