如何获得底层套接字读取缓冲区的大小?

aj3423

有一个用于原始套接字的api:

int sz;
ioctlsocket(sock, FIONREAD, &sz); 
::recv(sock, buff, sz, 0);

ioctlsocket可以用来获得进入缓冲区的大小,而是如何与OpenSSL的得到它:

int sz = what?
SSL_read(pSSL, buff, sz);
w

但是如何使用openssl获取[传入缓冲区大小]?

OpenSSL使用BIOBIO_get_write_buf_size写缓冲区有一个,但读缓冲区没有相应的控件。您可以使用设置读取缓冲区的大小BIO_set_read_buffer_size但是我相信这会为设置缓冲区BIO,而不是套接字上的I / O缓冲区。struct bio_bio_stcrypto/bio/bss_bio.c,并在文档BIO_f_buffer(3)BIO_s_bio(3)

你应该能够调用BIO_get_fdBIO得到根本插座,然后使用ioctlioctlsocket您可以在BIO找到SSL*OpenSSL方便地具有SSL_get_rbioSSL_get_wbio来自ssl/ssl.h

struct ssl_st
    {
    /* protocol version
     * (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, DTLS1_VERSION)
     */
    int version;
    int type; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */

    const SSL_METHOD *method; /* SSLv3 */

    /* There are 2 BIO's even though they are normally both the
     * same.  This is so data can be read and written to different
     * handlers */

#ifndef OPENSSL_NO_BIO
    BIO *rbio; /* used by SSL_read */
    BIO *wbio; /* used by SSL_write */
    BIO *bbio; /* used during session-id reuse to concatenate messages */
#else
    char *rbio; /* used by SSL_read */
    char *wbio; /* used by SSL_write */
    char *bbio;
#endif
    /* This holds a variable that indicates what we were doing
     * when a 0 or -1 is returned.  This is needed for
     * non-blocking IO so we know what request needs re-doing when
     * in SSL_accept or SSL_connect */
    int rwstate;
    ...
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从套接字读取而不知道缓冲区的大小

来自分类Dev

套接字缓冲区大小:较大与较小的优缺点

来自分类Dev

在Windows下更改默认套接字缓冲区大小

来自分类Dev

套接字缓冲区大小未增加

来自分类Dev

TcpWindowSize与Windows上的套接字缓冲区大小

来自分类Dev

Windows上的TcpWindowSize vs套接字缓冲区大小

来自分类Dev

通过套接字发送文件 - 缓冲区大小

来自分类Dev

使用套接字时重用读取缓冲区

来自分类Dev

如何在python中设置套接字的发送缓冲区大小

来自分类Dev

TCP套接字缓冲区大小也应该是连接的MSS的偶数倍

来自分类Dev

Windows中套接字发送缓冲区的大小是多少?

来自分类Dev

有关数据包和缓冲区大小的TCP套接字编程

来自分类Dev

Java中通过套接字传输文件的缓冲区大小应该是多少

来自分类Dev

什么时候需要修改套接字的接收缓冲区大小?

来自分类Dev

套接字服务器以缓冲区大小接收数据

来自分类Dev

Linux可以将哪些值用于默认的unix套接字缓冲区大小?

来自分类Dev

为什么接收到的缓冲区大小比最初通过套接字发送的要大?

来自分类Dev

read()不读取套接字缓冲区上的剩余字节

来自分类Dev

C服务器套接字的读取功能写入脏缓冲区

来自分类Dev

C#.NET套接字tcp begin / endreceive客户端:endreceive读取所有字节,但是在beginreceive中,缓冲区大小自行更改

来自分类Dev

如何通过C中的套接字一起发送两个缓冲区?

来自分类Dev

您如何正确地为套接字构造和使用缓冲区?

来自分类Dev

如何在套接字流缓冲区中添加空终止。C

来自分类Dev

如何清除套接字缓冲区以从最新请求中获取最新数据

来自分类Dev

具有神秘缓冲区的套接字

来自分类Dev

JBoss 7的套接字缓冲区设置

来自分类Dev

带有神秘缓冲区的套接字

来自分类Dev

套接字缓冲区中的校验和字段

来自分类Dev

将数据放回套接字缓冲区

Related 相关文章

  1. 1

    从套接字读取而不知道缓冲区的大小

  2. 2

    套接字缓冲区大小:较大与较小的优缺点

  3. 3

    在Windows下更改默认套接字缓冲区大小

  4. 4

    套接字缓冲区大小未增加

  5. 5

    TcpWindowSize与Windows上的套接字缓冲区大小

  6. 6

    Windows上的TcpWindowSize vs套接字缓冲区大小

  7. 7

    通过套接字发送文件 - 缓冲区大小

  8. 8

    使用套接字时重用读取缓冲区

  9. 9

    如何在python中设置套接字的发送缓冲区大小

  10. 10

    TCP套接字缓冲区大小也应该是连接的MSS的偶数倍

  11. 11

    Windows中套接字发送缓冲区的大小是多少?

  12. 12

    有关数据包和缓冲区大小的TCP套接字编程

  13. 13

    Java中通过套接字传输文件的缓冲区大小应该是多少

  14. 14

    什么时候需要修改套接字的接收缓冲区大小?

  15. 15

    套接字服务器以缓冲区大小接收数据

  16. 16

    Linux可以将哪些值用于默认的unix套接字缓冲区大小?

  17. 17

    为什么接收到的缓冲区大小比最初通过套接字发送的要大?

  18. 18

    read()不读取套接字缓冲区上的剩余字节

  19. 19

    C服务器套接字的读取功能写入脏缓冲区

  20. 20

    C#.NET套接字tcp begin / endreceive客户端:endreceive读取所有字节,但是在beginreceive中,缓冲区大小自行更改

  21. 21

    如何通过C中的套接字一起发送两个缓冲区?

  22. 22

    您如何正确地为套接字构造和使用缓冲区?

  23. 23

    如何在套接字流缓冲区中添加空终止。C

  24. 24

    如何清除套接字缓冲区以从最新请求中获取最新数据

  25. 25

    具有神秘缓冲区的套接字

  26. 26

    JBoss 7的套接字缓冲区设置

  27. 27

    带有神秘缓冲区的套接字

  28. 28

    套接字缓冲区中的校验和字段

  29. 29

    将数据放回套接字缓冲区

热门标签

归档