MS VC++ OpenSSL SSL_read() blocking
MS VC++ OpenSSL SSL_read() blocking
我正在尝试使用OpenSSL实现通过SSL/TLS从C 发送HTTP-POST请求。除SSL_read()
零件外,以下实现有效。SSL_write()
成功返回已发送字节的数量,但是SSL_read()
只是阻止了程序执行。
任何想法怎么了?
SSL_CTX *ctx;
SSL *ssl;
char buf[1024];
int server, bytes, recv;
SSL_library_init();
ctx = InitCTX(); // Custom Function
server = OpenConnection(); // Custom Function
ssl = SSL_new(ctx);
SSL_set_fd(ssl, server);
ostringstream FormBuffer;
FormBuffer << "POST " << FormAction << " HTTP/1.1n";
FormBuffer << "Host: " << Host << "n";
FormBuffer << "User-Agent: " << UserAgent << "n";
FormBuffer << "Content-Type: application/x-www-form-urlencodedn";
FormBuffer << "Content-Length: " << ContentLength << "nn";
FormBuffer << "username=USER&password=PWDn";
const auto str = FormBuffer.str();
if (SSL_connect(ssl) != -1)
{
bytes = SSL_write(ssl, str.data(), str.length());
recv = SSL_read(ssl, buf, sizeof(buf)); // <--- BLOCKING !!!
...
SSL_free(ssl);
}
这与SSL无关。您将POST请求的标题部分发送到服务器,而不是主体(用于发布的数据)。但是服务器只有在收到并处理请求正文后才做出响应。这意味着您从服务器读取的读取将仅阻止,因为服务器没有发送数据。
相关文章:
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- WinSock Non-Blocking I/O
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- write() 和 read() 中几乎没有混淆
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 对同一文件使用 .read 的次数是否有限制?
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- QDataStream read to QVector
- asio::read() 需要很长时间,使用 asio::write 没有问题
- Read OpenCV Mat 16bit to QImage 8bit Greyscale
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- 如何将 (serverClients[i].read() 传递给 ESP8266 上的字节数组
- 将 Lora.read() 转储到数组
- 无法通过 FUSE 文件系统"read"任何内容
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- C++HTTP客户端在GET请求后挂起read()调用
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据