SSL\u do\u握手后Openssl写入BIO发生更改

SSL\u do\u握手后Openssl写入BIO发生更改,openssl,Openssl,此2 bio是使用bio_new(bio_s_mem())生成的,运行包含此代码段的编译代码后,在我的终端中打印以下内容: ...... SSL_set_bio(mSsl, rbio, wbio); ...... BIO* rBio0 = SSL_get_rbio(mSsl); BIO* wBio0 = SSL_get_wbio(mSsl); printf("xxxxxxxxxxx get0 write %p\n", wBio0); printf("xxxxxxxxx

此2 bio是使用
bio_new(bio_s_mem())
生成的,运行包含此代码段的编译代码后,在我的终端中打印以下内容:

  ......
  SSL_set_bio(mSsl, rbio, wbio);
  ......
  BIO* rBio0 = SSL_get_rbio(mSsl);
  BIO* wBio0 = SSL_get_wbio(mSsl);
  printf("xxxxxxxxxxx get0 write %p\n", wBio0);
  printf("xxxxxxxxxxx get0 read %p\n", rBio0);
  int r = SSL_do_handshake(mSsl);
  BIO* rBio1 = SSL_get_rbio(mSsl);
  BIO* wBio1 = SSL_get_wbio(mSsl);
  printf("xxxxxxxxxxx get1 write %p\n", wBio1);
  printf("xxxxxxxxxxx get1 read %p\n", rBio1);
这正常吗

在这段代码之后,我想使用
BIO_get_mem_data
从内存中获取数据并将其发送到远程,因为写入BIO已更改,我无法获取数据


顺便说一句,我以前用两个全局变量来存储写bio和读bio,都很好。

请问您为什么调用
SSL\u do\u handshake
?为什么不使用适当的ssl功能进行连接并接收/发送数据?如果这样做,BIOs将不会有任何问题。我正在使用libnice和openssl实现dtls srtp,因此在ice连接就绪后,我使用libnice发送和接收数据,包括dtls握手数据,因此我使用内存bio作为中介。
xxxxxxxxxxx get0 write 0xc18800
xxxxxxxxxxx get0 read 0xc16730
xxxxxxxxxxx get1 write 0xc27f80
xxxxxxxxxxx get1 read 0xc16730