sinyalleri send
ve receive
gibi soket işlevleri sinyallerle kesilebilir. Bundan dolayı, bazı ekstra kodlara ihtiyaç duyulmaktadır, örn. errno == EINTR
için kontrol etmek. Bu, ilgili adam sayfalarında açıklanmıştır.OpenSSL ve
OpenSSL işlevleri kullanıldığında bunun nasıl çalıştığını merak ediyorum, ör. SSL_write
, SSL_read
. Adamların sayfaları, sinyaller hakkında bir şey söylemez. Bunun için google'ı da denedim, ama şanssız. OpenSSL'nin sinyalleri dahili olarak ele alıp almadığını mı yoksa bazı ekstra kodlara mı ihtiyaç duyduğunu biliyor musunuz? Eğer evet ise, işlev çağrısının sinyalle kesilip kesilmediğini nasıl kontrol edersiniz?
Güncelleme:
OpenSSL yeniden deneme işlemek etmediğini görünüyor. Sadece BIO nesnesinde "yeniden denemeli" bayrağını ayarlar. Bu yüzden çağrı kesildi ve yeniden deneme gerekiyorsa algılamak için böyle bir şey kullanmak gerekir:
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