diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2009-04-07 16:30:32 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2009-04-07 16:30:32 +0000 |
commit | c184b140df83ef5e91abf3e1d405059f898269d6 (patch) | |
tree | 212e4f387154b52760a2ec716eac0aa9212a2c85 /ssl/s3_lib.c | |
parent | 9d80aa7e3fd269ee3e7643af68fe61115119f7bd (diff) |
Update from 0.9.8-stable.
Diffstat (limited to 'ssl/s3_lib.c')
-rw-r--r-- | ssl/s3_lib.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c index 727827f91d..73a573ee29 100644 --- a/ssl/s3_lib.c +++ b/ssl/s3_lib.c @@ -3138,6 +3138,7 @@ int ssl3_get_req_cert_type(SSL *s, unsigned char *p) int ssl3_shutdown(SSL *s) { + int ret; /* Don't do anything much if we have not done the handshake or * we don't want to send messages :-) */ @@ -3155,18 +3156,32 @@ int ssl3_shutdown(SSL *s) #endif /* our shutdown alert has been sent now, and if it still needs * to be written, s->s3->alert_dispatch will be true */ + if (s->s3->alert_dispatch) + return(-1); /* return WANT_WRITE */ } else if (s->s3->alert_dispatch) { /* resend it if not sent */ #if 1 - s->method->ssl_dispatch_alert(s); + ret=s->method->ssl_dispatch_alert(s); + if(ret == -1) + { + /* we only get to return -1 here the 2nd/Nth + * invocation, we must have already signalled + * return 0 upon a previous invoation, + * return WANT_WRITE */ + return(ret); + } #endif } else 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); + if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) + { + return(-1); /* return WANT_READ */ + } } if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |