BIO to abstrakcja wejścia wyjścia dostarczona przez SSL. Zalecane jest jej stosowanie, ponieważ ukrywa ona szczegóły wejścia/wyjścia. Tak długo, jak BIO jest prawidłowo skonfigurowany, można ustanowić połączenie SSL na dowolnym wejściu/wyjścitr BIO ukrywa szczegóły związane z obsługą połączenia SSL, nieszyfrowanego połączenia a także dotyczące operacji na plikach
BIO dzieli się na:
- source/sink BIO
- filter BIO
Pierwsze służą do operacji na gniazdach i plikach Drugie pobierają dane z innych BIO i przekazują dalej do następnych lub bezpośrednio do aplikacji Przekazywane dane mogą pozostać niezmienione (np. Message Digest BIO) lub zmodyfikowane (np. szyfrujące BIO). Efekt operacji BIO może się zmieniać w zależności od operacji. Na przykład szyfrujące BIO będzie szyfrować dane podczas zapisywania, ale odszyfrowywać podczas czytania.
BIO mogą być łączone w łańcuchy (pojedynczy BIO jest łańcuchem składającym się z jednego elementu) Łańcuchy zwykle składają się z jednego source/sink BIO i jednego lub więcej filter BIO. Dane są czytane lub zapisywane do pierwszego BIO, a następnie przechodzą przez cały „łańcuch” do końca (zwykle source/sink BIO).
BIO_do_accept
int BIO_do_accept(BIO *b)
Spełnia dwie funkcje. Przy pierwszym wywołaniu (po zaakceptowaniu konfiguracji BIO) spróbuje utworzyć gniazdo i zbindować adres do mego (przygotowuje BIO do nasłuchu) Kolejne wywołania będą oczekiwały na przychodzące połączenie lub prośbę ponowienia w hybie bez blokowania (non blocking modę).
BłOdoconnect
int BIO_do_connect(BIO *b)
Próbuje połączyć dostar czone BIO. Zwraca 1 jeśli połączenie zostało zakończone sukcesem.
Zerowa lub ujemna w'artość jest zwracana jeśli połączenie nie mogło zostać nawiązane (nawiązanie połączenia nie powiodło się).
BIO_do_handshake
long BIO_do_handshake(BIO * b)
Próbuje ukończyć SSL liandshake na dostar czonym BIO i ustanowić połączenia SSL Zwraca 1 jeśli połączenie zostało zakończone sukcesem Zerowa lub ujemna wartość jest zwracana jeśli połączenie nie mogło zostać nawiązane (nawiązanie połączenia nie powiodło się).
BlOJlush
int BIO_flush(BIO * b)
Zazwyczaj zapisuje wszystkie wewnętrznie buforowane dane W niektórych przypadkach jest wykorzystywany do zasygnalizowania EOF.