我正在尝试创建一个客户端/服务器程序,但我发现在遗憾的稀疏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
答案 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 );