In OpenSSl, le pagine man per La maggior parte delle chiamate SSL_ * indicano un errore restituendo un valore < = 0 e suggeriscono di chiamare SSL_get_error() per ottenere l'errore esteso .Come gestire la coda degli errori in openssl (SSL_get_error e ERR_get_error)
Ma all'interno le pagine man di queste chiamate, così come per le altre chiamate di libreria OpenSSL, ci sono vaghi riferimenti a usare la "coda di errore" in OpenSSL - Tale è il caso nella pagina man per SSL_get_error:
The current thread's error queue must be empty before the TLS/SSL I/O
operation is attempted, or SSL_get_error() will not work reliably.
E in quella stessa pagina man, la descrizione di questo SSL_ERROR_SSL dice:
SSL_ERROR_SSL
A failure in the SSL library occurred, usually a protocol error.
The OpenSSL error queue contains more information on the error.
questo tipo di implica che ci sia qualcosa nella coda di errore la pena di leggere. E la mancata lettura rende inaffidabile una successiva chiamata a SSL_get_error. Presumibilmente, la chiamata per effettuare è ERR_get_error.
Ho intenzione di utilizzare socket non bloccanti nel mio codice. Pertanto, è importante scoprire in modo affidabile quando la condizione di errore è SSL_ERROR_WANT_READ o SSL_ERROR_WANT_WRITE, in modo da poter inserire il socket nella corretta modalità di polling.
Quindi le mie domande sono questo:
fa SSL_get_error() chiamata ERR_get_error() implicitamente per me? O devo usare entrambi?
Devo chiamare ERR_clear_error prima di ogni chiamata di libreria OpenSSL?
È possibile che più di un errore si verifichi nella coda dopo il completamento di una chiamata di libreria OpenSSL? Quindi, ci sono circostanze in cui il primo errore nella coda è più rilevante dell'ultimo errore?
Per l'ultimo: Sì, questo potrebbe accadere. È possibile che un livello inferiore abbia un errore, aggiunga un messaggio alla coda e a causa di questo errore un livello superiore nella libreria aggiunga il proprio messaggio. In alcuni casi ho visto cinque e più messaggi in pila. – javex
@javex - d'accordo. – selbie