openssl之BIO系列之13---Socket類型BIO,openssl13---socket

來源:互聯網
上載者:User

openssl之BIO系列之13---Socket類型BIO,openssl13---socket

Socket類型BIO

    ---根據openssl doc\crypto\bio_s_socket.pod翻譯和自己的理解寫成

    (作者:DragonKing Mailwzhah@263.net 發佈於:httpgdwzh.126.com之openssl專

業論壇)

    Socket類型的BIO也是一種source/sink型BIO,封裝了Socket的IO操作,它相關的一

些函數定義如下(openssl\bio.h):

     BIO_METHOD * BIO_s_socket(void);

     #define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)

     #define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)

     BIO *BIO_new_socket(int sock, int close_flag);

    前面我們在介紹fd類型BIO的時候曾經說過,它的函數的實現檔案跟Soket類型的BI

O其實是放在一起的,都在檔案bss_socket.c裡面,從這些定義我們就可以知道,之所以

這樣做,是因為這兩種類型的BIO實現的函數基本是相同的,並且具有很多的共性。

    【BIO_s_socket】

    該函數返回一個Socket類型的BIO_METHOD結構,BIO_METHOD結構的定義如下:

    static BIO_METHOD methods_sockp=

     {

     BIO_TYPE_SOCKET,

     "socket",

     sock_write,

     sock_read,

     sock_puts,

     NULL, /* sock_gets, */

     sock_ctrl,

     sock_new,

     sock_free,

     NULL,

     };

    可以看到,它跟fd類型BIO在實現的動作上基本上是一樣的。只不過是首碼名和類型

欄位的名稱不一樣。其實在象Linux這樣的系統裡,Socket類型跟fd類型是一樣,他們是

可以通用的,但是,為什麼要分開來實現呢,那是因為有些系統如windows系統,socke

t跟檔案描述符是不一樣的,所以,為了平台的相容性,openssl就將這兩類分開來了。

 

    BIO_read和BIO_write對底層的Socket結構進行讀寫操作。

    BIO_puts是支援的,但是BIO_gets在Socket類型BIO中是不支援的,大家如果看源代

碼就可以知道,雖然BIO_gets在Socket類型是不支援的,但是如果調用該函數,不會出

現異常,只會返回-1的出錯資訊。

    如果設定了關閉標誌,那麼當BIO被釋放的時候底層的Socket串連就會被關閉。

    【BIO_set_fd】

    該函數將Socket描述符fd設定為BIO的底層IO結構,同時可以設定關閉標誌c。該函

數返回1。

    【BIO_get_fd】

    該函數返回指定BIO的Socket描述符,如果c參數不是NULL,那麼就將該描述符存在

參數c裡面,當然,Socket描述符同時也作為返回值,如果BIO沒有初始化則調用失敗,

返回-1。

    【BIO_new_socket】

    該函數根據給定的參數返回一個socket類型的BIO,成功返回該BIO指標,失敗返回

NULL。其實,該函數依次調用了BIO_s_socket,BIO_new和BIO_set_fd實現它的功能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.