可能导致ssl_error_want_read错误的原因 非阻塞模式:当SSL套接字被设置为非阻塞模式时,如果SSL库需要等待网络数据到达才能完成操作,就会返回SSL_ERROR_WANT_READ。 数据未到达:如果网络延迟或对方发送数据较慢,SSL库在等待数据时会返回此错误。 部分握手:在SSL握手过程中,如果SSL库需要等待对方发送更多的握手消息,也...
我现在项目需要将SSL阻塞方式改为非阻塞方式,使用的多线程,在一个线程中对一个SSL对象SSL_write,在另一个线程中使用该对象进行SSL_read操作。 在《Network Security with OpenSSL》讲non-blocking的一节中有个data_transfer的示例程序: for(;;) {/* check_availability使用I/O复用接口(select、poll、epoll等)来...
我现在项目需要将SSL阻塞方式改为非阻塞方式,使用的多线程,在一个线程中对一个SSL对象SSL_write,在另一个线程中使用该对象进行SSL_read操作。 在《Network Security with OpenSSL》讲non-blocking的一节中有个data_transfer的示例程序: for(;;) {/* check_availability使用I/O复用接口(select、poll、epoll等)来...
但是socket例外,它也会对ssl模块(如果存在)打补丁,thread用于对threading、thread、Queue打补丁。说明:...
实际上,openssl 定义了一个 SSL_get_error 来判断 SSL_read 函数的运行结果,使用的方法类似如下: err = SSL_read(ssl, buf, sizeof(buf) - 1); sslerr = SSL_get_error(ssl, err); 如果是返回值是 SSL_ERROR_WANT_READ,则要重新接收数据。这一定义是在 openssl 中的,具体位置见下图: 在图中可以...
if ((l = ERR_peek_error()) != 0) { if (ERR_GET_LIB(l) == ERR_LIB_SYS) return SSL_ERROR_SYSCALL; else return SSL_ERROR_SSL; } if (SSL_want_read(s)) { bio = SSL_get_rbio(s); if (BIO_should_read(bio)) return SSL_ERROR_WANT_READ; ...
在这种情况下,通过SSL_get_error(3)调用 SSL_read()的返回值就会返回 SSL_ERROR_WANT_READ 或SSL_ERROR_WANT_WRITE。在任何时候都可能出现重协商,故而这个时候调用SSL_read() 可能会导致写操作,因为需要发送协商内容。在采取合适措施满足SSL_read()的执行条件后,调用过程需要被重复执行,具体措施取决于底层的BIO...
最近,我被一款叫做 ChatGPT 的人工智能(AI)聊天机器人,刷屏了。网上有人说它是搜索引擎杀手,还有...
The application does not do SSL_write the HTTP request because it has to repeat SSL_read before. I think the first SSL_read has to return 0 or -1 and SSL_get_error has to return SSL_ERROR_NONE, if there is no more protocol data to read. SSL_ERROR_WANT_READ may only be returned...
我使用的是SSL_Connect(),返回代码是"-1“,使用SSL_get_error()时,我可以看到错误是SSL_ERROR_WANT_READ。 根据一个论坛上的建议,它建议继续调用SSL_connect(),直到这个错误消失。通过对第一个调用的这个修改,我得到了错误WANT_READ,而对于第二个调用,我得到了SSL_ERROR_SSL。之后,对于所有后续调用,它只是SSL...