2010-09-03 160 views
3

我試圖創建一個客戶端/服務器程序,但我發現一些困難繼續與不幸的稀疏量的OpenSSL文檔繼續。SSL_accept()拋出「無效參數」錯誤

我的問題: SSL_accept拋出一個「無效參數」在執行以下代碼(簡化):

SSL* ssl = SSL_new(ctx); // ctx is created earlier 
SSL_set_fd(ssl, socket); // socket is created earlier as well 
BIO * bio = BIO_new(BIO_s_accept()); 
BIO_set_fd(bio, socket, BIO_NOCLOSE); 
SSL_set_bio(ssl, bio, bio); 
SSL_accept(ssl); 

我檢查錯誤,每個方法調用後,與沒有插座,也不是生物變壞。沒有跡象表明,直到我嘗試調用SSL_accept時纔會發生任何奇怪的事情。我假設SSL對象是沿途某處損壞,但我沒有一個線索〜

編輯的SSL對象和BIO對象是如何在調用SSL_accept點空()。

在正確的方向的任何指針將不勝感激:d

回答

1

和你一樣,我有困難的時候與文檔的缺乏。所以我不能說set_fd電話是錯誤的還是正確的,但是我沒有這些電話就能解決問題。我已經成功地使用調用序列是:

BIO *sbio = BIO_new_socket(socket, BIO_NOCLOSE); 
SSL* ssl = SSL_new(ctx); 
SSL_set_bio(ssl, sbio, sbio); 
SSL_accept(ssl); 
+0

優秀。問題是用BIO_s_accept()創建一個新的生物插座。我會做更多的挖掘,爲什麼,但是一旦我製作了一個標準的BIO插座,接受似乎就像一個魅力。 – 2010-09-03 22:45:16

2

SSL_set_fd()是指爲方便替代手動設置BIOS。它會自動創建一個BIO並設置它 - 所以您只需要:

SSL* ssl = SSL_new(ctx); 
SSL_set_fd(ssl, socket); 
SSL_accept(ssl); 
+0

太棒了〜從閱讀文檔,我永遠不會那樣。謝謝! – 2010-09-04 17:34:26