Napisałem jednego klienta SSL przy użyciu interfejsów API OpenSSL do interakcji z jednym serwerem SSL. W witrynie OpenSSL dowiedziałem się, że bufor zapisu musi zostać przepłukany po zapisaniu niektórych danych. Używam SSL_Write i SSL_Read w moim programie klienta. Ponieważ strona OpenSSL zasugerowała, że próbowałem spłukać dane przy użyciu BIO_flush (BIO *), mam tu awarię.Czy istnieje sposób na opróżnienie bufora zapisu SSL
używam biblioteki SSL dostał od this site
Tutaj nie jestem jasne, czy BIO_flush miga bufor odczytu lub zapisu bufora .. :-( Więc chciałem po prostu wiedzieć, czy istnieje jakieś inne sposoby opróżnić bufor zapisu SSL ...?
Oto szczegóły na temat mojego programu klienckiego.
- Tworzenie obiektu SSL (mSsl) używając SSL_new
- Crea ting gniazdo TCP i dokonując połączenia z serwerem
- Tworzenie obiektu BIO (mBio) używając BIO_new_socket (socket_id, BIO_NOCLOSE)
- Ustawianie obiektu BIO do obiektu przy użyciu protokołu SSL (mSsl SSL_set_bio, mBio, mBio);
- Ustawianie gniazda do obiektu SSL za pomocą SSL_set_fd (mSsl, socket_id);
- Nawiązywanie połączenia SSL z serwerem za pomocą SSL_Connect (mSsl);
Po wykonaniu powyższych kroków uruchamiam dwa oddzielne wątki do zapisu i odczytu. Napisz wątek używa SSL_write do zapisu danych na serwer, a wątek do odczytu używa SSL_Read do odczytania danych z serwera.
W Napisz wątek po napisaniu każdego pakietu za pomocą SSL_Write Dzwonię BIO_flush (mBio).
W całym programie bezpośrednio korzystam z obiektu mBio tylko w tym miejscu, aby wykonać bufor biologiczny.
Kiedy zacznę wysyłać niektóre pakiety, program się zawiesza w BIO_flush ... Jak na zrzucie mówi to w funkcji BIO_ctrl. Nie dostaję nic więcej.
Czy ktoś użył biblioteki, której link podałem powyżej i napotkałem ten sam problem ..? Jeśli tak, daj mi znać, jeśli znasz rozwiązanie.
Czy są jakieś reguły synchronizacji wątków, aby używać BIO_flush() ...? Mam na myśli połączenie z BIO_flush SSL_Read nie powinno się wydarzyć w tym samym czasie ...?