SSL_accept()抛出“无效参数”错误

时间:2010-09-03 21:45:27

标签: c++ openssl

我正在尝试创建一个客户端/服务器程序,但我发现在遗憾的稀疏OpenSSL文档数量方面仍然存在一些困难。

我的问题: 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); 

我在每个方法调用后检查错误,socket和bio都没有变坏。在我尝试调用SSL_accept之前,没有迹象表明发生任何奇怪的事情。我假设ssl对象在途中被破坏了,但我不知道如何〜

编辑在调用SSL_accept()时,SSL对象和BIO对象为空。

任何指向正确方向的人都会非常感激:D

2 个答案:

答案 0 :(得分:2)

SSL_set_fd()是一种方便的替代,用于手动设置BIO。它会自动创建一个BIO并进行设置 - 所以您需要做的就是:

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

答案 1 :(得分: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 );