Le funzioni socket come send
e receive
possono essere interrotte dai segnali. Per questo motivo è necessario un codice aggiuntivo, ad es. controllare errno == EINTR
. Questo è descritto nelle pagine man corrispondenti.OpenSSL e segnali
Mi chiedo come funzioni quando vengono utilizzate le funzioni OpenSSL, ad es. SSL_write
, SSL_read
. Le loro pagine man non dicono nulla sui segnali. Ho anche provato a google per questo, ma senza fortuna. Sai se OpenSSL gestisce i segnali internamente o è necessario un codice aggiuntivo? Se sì, come verificare se la chiamata alla funzione è stata interrotta dal segnale?
Aggiornamento:
sguardi che OpenSSL non gestisce tentativi. Imposta solo il flag "dovrebbe riprovare" sull'oggetto BIO. Così ho bisogno di usare qualcosa di simile per rilevare se chiamata è stata interrotta ed è necessario tentativo:
int result = SSL_write(ssl, buff, length);
if ((result < 0) && BIO_should_retry(SSL_get_wbio(ssl)))
// need to retry
int result = SSL_read(ssl, buff, length);
if ((result < 0) && BIO_should_retry(SSL_get_rbio(ssl)))
// need to retry