我已經寫了一個使用OpenSSL API與一臺SSL服務器交互的SSL客戶端。在OpenSSL站點中,我瞭解到寫入一些數據後需要刷新寫入緩衝區。我在客戶端程序中使用SSL_Write和SSL_Read。由於OpenSSL網站建議我嘗試使用BIO_flush(BIO *)刷新數據,因此我在這裏崩潰。有沒有什麼辦法刷新SSL寫緩衝區
我使用的是SSL庫從this site
這裏有我不清楚是否BIO_flush閃爍讀緩存或寫緩衝區.. :-( 所以我只是想知道有沒有其他的方法來刷新SSL寫緩衝區...?
這裏是我的客戶端程序的細節。
- 創建使用SSL_new
- 克雷亞SSL對象(MSSL)廷TCP套接字並與服務器
- 創建使用BIO_new_socket BIO對象(姆比奧)使得連接(socket_id,BIO_NOCLOSE)
- 設置使用SSL_set_bio(MSSL,姆比奧,姆比奧)的BIO對象到SSL對象;
- 使用SSL_set_fd(mSsl,socket_id)將套接字設置爲SSL對象;
- 使用SSL_Connect(mSsl)與服務器建立SSL連接;
上述步驟後,我開始兩個單獨的線程進行寫入和讀取。寫入線程使用SSL_write將數據寫入服務器,讀取線程使用SSL_Read從服務器讀取數據。
在使用SSL_Write寫入每個數據包之後寫入線程我正在調用BIO_flush(mBio)。
在整個程序中,我只是在這個地方直接使用mBio對象來做生物緩衝區刷新。
當我開始發送一些數據包,程序崩潰在BIO_flush ...按照轉儲說,它在BIO_ctrl功能。我沒有得到任何更多的東西。
有沒有人使用過我提供的鏈接庫,並面臨同樣的問題..?如果是,請告訴我,如果你知道解決方案。
是否有任何線程同步規則使用BIO_flush()...?我的意思是撥打BIO_flush SSL_Read不應該在同一時間發生......?