There's no good reason for SSL_shutdown() to ever return a value of 0. 
The attached patch simplifies things.



--- openssl-1.0.1-beta3-0orig/ssl/s3_lib.c      2012-02-10 12:08:49.000000000 
-0800
+++ openssl-1.0.1-beta3/ssl/s3_lib.c    2012-03-02 11:19:53.847954000 -0800
@@ -4112,7 +4112,7 @@
                if (s->s3->alert_dispatch)
                        return(-1);     /* return WANT_WRITE */
                }
-       else if (s->s3->alert_dispatch)
+       if (s->s3->alert_dispatch)
                {
                /* resend it if not sent */
 #if 1
@@ -4127,7 +4127,7 @@
                        }
 #endif
                }
-       else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
+       if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
                {
                /* If we are waiting for a close from our peer, we are closed */
                s->method->ssl_read_bytes(s,0,NULL,0,0);
@@ -4137,11 +4137,7 @@
                        }
                }
 
-       if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
-               !s->s3->alert_dispatch)
-               return(1);
-       else
-               return(0);
+       return(1);
        }
 
 int ssl3_write(SSL *s, const void *buf, int len)

Reply via email to