- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个使用 OpenSSL 进行 SSL/TLS 的网络服务器。服务器发送和接收大数据 block 并在其间执行各种转换。出于性能原因,转换主要使用 vector 信息(请参阅 POSIX 中的 iovec)来完成,以避免昂贵的内存移动(memcpy() 等)。当数据准备好发送时,我使用 writev() POSIX 函数,该函数使用这些 vector 从内存中收集数据,并且通常将其作为一个网络数据包发送。
现在使用 OpenSSL,这并不完全可能,因为据我所知,OpenSSL 仅提供 SSL_write() 函数。这意味着我必须为每个要发送的 vector 条目调用此函数。不幸的是,它导致每个 vector 数据 block 都在自己的 SSL 帧中传输,从而引入了不需要的和不必要的网络开销。
我的问题是:SSL_writev() 是否与 writev() 等效?或者一般来说,是否有一种技术可以告诉 OpenSSL 将 SSL_write() 数据存储到一个 SSL 应用程序记录(类型 22)中而不发送它(当然还有某种flush() 函数)?
编辑:如下所述,一种可行的方法是在最终的单个 SSL_write() 调用之前将 vector 数据合并为一个大块。然而,2 个副本会产生连接开销(第一个副本在合并期间,第二个副本在 SSL_write() 执行 AES 加密时)。理论上的 SSL_writev() 调用不会引入此开销。
最佳答案
您可以使用BIO_f_buffer()
来实现此目的。将网络层 BIO 包装在 BIO_f_buffer()
过滤器 BIO 中,并将其设置为 SSL 对象的写入 BIO。这将导致所有写出的数据保留在缓冲区中,直到您对其发出刷新。
关于c - OpenSSL SSL_write 来自多个缓冲区/SSL_writev,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198638/
我正在尝试将 OpenSSL 添加到 epoll 中,并且套接字处于非阻塞模式。令我困惑的一个问题是:由于 SSL 重新协商,SSL_read 可能会产生 SSL_ERROR_WANT_WRITE ,
int SSL_write(SSL *ssl, const void *buf, int num); result = SSL_write(pSsl, buf, 8); 如果结果大于0,是否可以小于8
我用 C 编写了一个小的 HTTPS 客户端,但我在 SSL_write 函数方面遇到了问题。三个测试来说明我的问题: #define HEADERS1 "GET / HTTP/1.1\r\n" #d
我正在尝试使用 OpenSSL (1.1.1)。但在写作过程中,我得到了写作失败(从 ERR_print_errors 获得)。握手成功(返回1)。我也在尝试将其限制为 TLS 1.3 #includ
如何检查是否可以使用 SSL_write() 写入 SSL 流? 我需要类似的东西 if(SSL_write_possible(ssl)) SSL_write(); 最佳答案 看起
下面的描述是关于int SSL_write(SSL *ssl, const void *buf, int num): When an SSL_write() operation has to be r
我编写了一个使用 OpenSSL 进行 SSL/TLS 的网络服务器。服务器发送和接收大数据 block 并在其间执行各种转换。出于性能原因,转换主要使用 vector 信息(请参阅 POSIX 中的
我自己实现了一个使用 openssl 的网络服务器。 我在 OSX 上使用 SSL_write 的阻塞版本传输数据和最新的 Safari。 我的逻辑是这样的: num_bytes = 0; while
我正在开发一个客户端应用程序,该应用程序使用 OpenSSL 使用非阻塞 I/O 进行 TLS。连接的双方都可以随时写入,表明某些状态发生变化。因此,我需要定期检查套接字以获取可用的新数据。如果没有收
是否可以使用 SSL_write 和 SSL_read 发送和接收结构? 客户端 typedef struct{ unsigned int userid; unsigned i
我知道在 OpenSSL API 中禁止在同一 SSL 上下文中从两个不同的线程调用 SSL_read 和 SSL_write,但它是在我的应用程序中重要的是要有安全的全双工通信。我想到了一些解决方案
我有两个应用程序通过 SSL 相互通信。客户端在 windows 机器上运行,服务器是基于 linux 的应用程序。客户端在启动时向服务器发送大量数据。数据以约 4000 字节的 block 发送到包
我正在尝试使用 PHP 脚本连接到服务器。服务器由 SSLv3 设置,我想也许我需要使用 SSL_Write() 来处理将发送到服务器的消息。但是我没有在PHP中找到相关的功能。所以,我想知道我应该使
我计划在执行读取或写入操作之前使用 SSL_want 调用,这样我们就可以避免像 WANT_READ 或 WANT_WRITE 这样的 SSL 错误。请提供您的建议。 最佳答案 不是这样的。 SSL_
我已经用 C 编写了一个基于事件的网络库,现在我想通过 OpenSSL 添加 SSL/TLS 支持。而不是使用 SSL_read() 和 SSL_write(),我宁愿让 OpenSSL 只执行传出/
免责声明,我是 Golang 的新手,因为我使用以下文章作为此 https://blog.gopheracademy.com/advent-2015/libc-hooking-go-shared-li
我已经完成了我的工作,我想将其推送到我在github上的仓库 但推送失败,并显示以下错误: error: RPC failed; curl 55 SSL_write() returned SYSCAL
我的程序是基于OpenSSL(阻塞模式)开发的,我想将它重构为非阻塞的。它在具有 SSL 对象的线程中调用 SSL_read(),并在具有相同对象的另一个线程中调用 SSL_write()。 我从书"
我有一个客户端程序,它使用基于消息的协议(protocol)与服务器通信。每个请求都匹配 1 个或多个响应。 多个请求可以同时在一个套接字上排队,并且 I/O 使用非阻塞 I/O 在单独的线程上完成。
完整的信息列表 Counting objects: 1945, done. Delta compression using up to 8 threads. Compressing objects:
我是一名优秀的程序员,十分优秀!