- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找通过 HTTPS 从服务器下载或读取文件,并且我正在使用 openSSL。
我看到连接成功,但是 SSL_read()
返回 0。SSL_get_error()
返回 6 表示 SSL_ERROR_ZERO_RETURN
宏,似乎是一种正常行为,但我不确定为什么在读取某些内容时连接会关闭?这可能就是它读取 0 字节的原因?
#define CHECK_NULL(x) if ((x)==NULL) exit (1)
#define CHECK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
#define CHECK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
void ServerConnectAndRcv(uint8_t *str)
{
int err;
int sd;
struct sockaddr_in sa;
SSL_CTX* ctx;
SSL* ssl;
char* str;
char buf [4096];
const SSL_METHOD *meth;
SSLeay_add_ssl_algorithms();
meth = TLSv1_2_client_method();
SSL_load_error_strings();
ctx = SSL_CTX_new (meth);
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
// create a socket and connect to the server
sd = socket (AF_INET, SOCK_STREAM, 0);
CHK_ERR(sd, "socket");
memset (&sa, '\0', sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr (<SERVER-IP>); /* Server IP */
sa.sin_port = htons (<SERVER-PORT>); /* Server Port number */
ssl = SSL_new (ctx);
CHECK_NULL(ssl);
SSL_set_fd (ssl, sd);
err = SSL_connect (ssl);
CHECK_SSL(err);
// read from the server
err = SSL_read (ssl, buf, sizeof(buf) - 1);
CHECK_SSL(err);
if (err <= 0)
{
printf ("Error reading: %d\n", SSL_get_error(ssl, err));
}
buf[err] = '\0';
printf ("Received % bytes\n", err); // Received 0 bytes
SSL_shutdown (ssl);
}
最佳答案
正如其中一位评论者指出的那样,我需要发送一个 GET 请求才能接收来自服务器的响应。
我发送了pszResourcePath
通过 SSL_write()
和 SSL_read()
阅读整个回复就好了。
char pszRequest[100]= {0};
char pszResourcePath[]="<resourcePath>";
char pszHostAddress[]="<serverIP>";
sprintf(pszRequest, "GET /%s HTTP/1.1\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n", pszResourcePath, pszHostAddress);
关于c - SSL_read() 返回 0,SSL_get_error 返回 6。为什么在 SSL_read() 期间连接关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70176751/
我是 SSL 套接字编程的新手,我的首要任务是让 SSL 服务器客户端正常工作和理解。 我已经获得了网络上的服务器和客户端源代码,并根据我的 openssl 库(从源代码编译)编译了它们。 当我启动服
在 OpenSSL 中,大多数 SSL_* 调用的手册页通过返回值 <= 0 来指示错误,并建议调用 SSL_get_error() 以获取扩展错误。 但是在这些调用以及其他 OpenSSL 库调用的
我们有一个用 C++ 编码的客户端应用程序,它使用 openssl 通过 SSL 连接到 Java 应用程序服务器。我们使用非阻塞套接字连接模式,可以选择“选择”或“轮询”机制来识别可供读取的数据包。
我正在寻找通过 HTTPS 从服务器下载或读取文件,并且我正在使用 openSSL。 我看到连接成功,但是 SSL_read()返回 0。SSL_get_error()返回 6 表示 SSL_ERRO
我是一名优秀的程序员,十分优秀!