SSL_WRITE在斷網時的表現

SSL_WRITE斷網造成的oom問題

前言:之前的帖子有說ssl_write的封裝和調用,可以看看這裏ssl_write的調用

之後的開發中有一條突然遇到了一個問題:斷網的時候造成oom,花了比較多的時間,終於找到了原因,ssl_write!!!具體的原因是這樣的:

之前也有說過,ssl_write代替了我們的send,但是在openssl有一個比較奇葩的問題就是在調用ssl_write的時候,有可能返回的是一個SSL_ERROR_WANT_READ或者SSL_ERROR_WANT_WRITE(這個在之前的帖子也用過,通過調用ssl_get_error來獲取這個值),那麼爲什麼會有這個呢?原因就是在http底層有一個重協商協議,這個就代表如果在數據交互的時候突然ssl鏈路層需要重新交互,這個交互是雙方的,那麼就代表,可能recv的時候阻塞或者send的時候阻塞,在recv的時候,我們只能乖乖等待其可讀了,那麼同理,send的時候也要等待可寫,直到其成功。那麼我這邊的處理方法是,在斷網的時候,等待ssl_get_error返回SSL_ERROR_WANT_WRITE,那麼這個時候我就認爲網絡斷開了(因爲我發送數據是不斷髮送的,可以結合之前的帖子來看),然後我就會不讓別的接口來調用ssl_write並解鎖,之後會斷開並釋放ssl連接以及相關資源,斷開tcp連接,重新連接。

大家有什麼不清除的地方可以給我留言,因爲這個是針對我目前的項目而言的,希望跟大家多交流~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章