gpt4 book ai didi

C - BIO_get_fd() 总是无法获取有效的 FD

转载 作者:行者123 更新时间:2023-11-30 17:51:35 25 4
gpt4 key购买 nike

为什么下面这段代码中BIO_get_fd()总是无法获取有效的FD?

SSL *pSsl = NULL;

int nRet;
int fdSocket;
fd_set connectionfds;
struct timeval timeout;

BIO_get_ssl(pBio, &pSsl);
if (!pSsl)
// failed to get SSL pointer of BIO.

SSL_set_mode(pSsl, SSL_MODE_AUTO_RETRY);

BIO_set_conn_hostname(pBio, "HostName");
BIO_set_conn_port(pBio, "PortNumber");

BIO_set_nbio(pBio, 1);

nRet = BIO_do_connect(pBio);

if ((nRet <= 0) && !BIO_should_retry(pBio))
// failed to establish connection.

if (BIO_get_fd(pBio, &fdSocket) <= 0)
// failed to get fd but why?

if (nRet <= 0)
{
FD_ZERO(&connectionfds);
FD_SET(fdSocket, &connectionfds);

timeout.tv_usec = 0;
timeout.tv_sec = 10;

nRet = select(fdSocket + 1, NULL, &connectionfds, NULL, &timeout);
if (nRet == 0)
// timeout has occurred.
}
  • 我的 BIO 对象已通过调用 BIO *BIO_new_ssl_connect(SSL_CTX *ctx) 预先正确创建
  • 我的 OpenSSL 版本是 v1.0.1e
  • 我正在 Ubuntu for ARM 上进行交叉编译

最佳答案

是我太蠢了。 BIO_get_fd() 返回 0,0 是有效的文件描述符!

BIO_get_fd() 返回套接字,如果 BIO 尚未初始化,则返回 -1。

所以这一行:

if (BIO_get_fd(pBio, &fdSocket) <= 0)

应该是

if (BIO_get_fd(pBio, &fdSocket) < 0)

关于C - BIO_get_fd() 总是无法获取有效的 FD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com