Ho scritto un client SSL utilizzando API OpenSSL per interagire con un server SSL. Nel sito OpenSSL ho appreso che il buffer di scrittura deve essere svuotato dopo aver scritto alcuni dati. Sto usando SSL_Write e SSL_Read nel mio programma client. Come suggerito dal sito di OpenSSL, ho provato a scaricare i dati usando BIO_flush (BIO *), mi trovo in crash qui.C'è un modo per svuotare il buffer di scrittura SSL
sto usando le librerie SSL ottenuto da this site
Qui non mi è chiaro sul fatto BIO_flush lampeggia il buffer di lettura o scrittura di buffer .. :-( Quindi volevo solo sapere c'è qualche altro modo per svuotare il buffer di scrittura SSL ...?
Ecco i dettagli circa il mio programma client.
- Creazione oggetto SSL (MSSL) utilizzando SSL_new
- Crea ting un socket TCP e fare la connessione con il server
- Creazione oggetto BIO (mBio) utilizzando BIO_new_socket (socket_id, BIO_NOCLOSE)
- Impostazione dell'oggetto BIO per oggetto SSL utilizzando SSL_set_bio (MSSL, mBio, mBio);
- Impostazione del socket sull'oggetto SSL mediante SSL_set_fd (mSsl, socket_id);
- Connessione SSL con server tramite SSL_Connect (mSsl);
Dopo i passaggi precedenti, sto avviando due thread separati per scrivere e leggere. Scrivi thread utilizza SSL_write per scrivere i dati sul server e Read thread utilizza SSL_Read per leggere i dati dal server.
In Scrivi filo dopo aver scritto ciascun pacchetto utilizzando SSL_Write Sto chiamando BIO_flush (mBio).
Nell'intero programma sto usando direttamente l'oggetto mBio solo in questo posto per eseguire il lavaggio del buffer biologico.
Quando avvio l'invio di alcuni pacchetti, il programma si arresta in modo anomalo in BIO_flush ... Come per il dump, dice che è in BIO_ctrl. Non sto ottenendo niente di più.
Qualcuno ha utilizzato la libreria di cui ho fornito il link sopra e con lo stesso problema ..? Se sì, per favore fatemi sapere se conoscete la soluzione.
Esistono regole di sincronizzazione dei thread per utilizzare BIO_flush() ...? Voglio dire, chiamare BIO_flush SSL_Read non dovrebbe accadere nello stesso momento in quel modo ...?