aboutsummaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2000-10-12 01:50:33 +0000
committerDr. Stephen Henson <steve@openssl.org>2000-10-12 01:50:33 +0000
commit924046ce75ae5d5ee763f7cff77854bb493814c0 (patch)
tree78f6182654c22fb21c1932bfd58f27aa06041d58 /ssl
parent9e2c0f41d7deb0d80be53eed75bfe79f24467ec3 (diff)
downloadopenssl-924046ce75ae5d5ee763f7cff77854bb493814c0.tar.gz
Make non blocking I/O work for accept BIOs.
Diffstat (limited to 'ssl')
-rw-r--r--ssl/bio_ssl.c4
-rw-r--r--ssl/ssl.h1
-rw-r--r--ssl/ssl_lib.c4
3 files changed, 9 insertions, 0 deletions
diff --git a/ssl/bio_ssl.c b/ssl/bio_ssl.c
index d85555a7e6..9141ec0d7b 100644
--- a/ssl/bio_ssl.c
+++ b/ssl/bio_ssl.c
@@ -206,6 +206,10 @@ static int ssl_read(BIO *b, char *out, int outl)
BIO_set_retry_special(b);
retry_reason=BIO_RR_SSL_X509_LOOKUP;
break;
+ case SSL_ERROR_WANT_ACCEPT:
+ BIO_set_retry_special(b);
+ retry_reason=BIO_RR_ACCEPT;
+ break;
case SSL_ERROR_WANT_CONNECT:
BIO_set_retry_special(b);
retry_reason=BIO_RR_CONNECT;
diff --git a/ssl/ssl.h b/ssl/ssl.h
index 87e609ed37..2bc994a0f4 100644
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -831,6 +831,7 @@ size_t SSL_get_peer_finished(SSL *s, void *buf, size_t count);
#define SSL_ERROR_SYSCALL 5 /* look at error stack/return value/errno */
#define SSL_ERROR_ZERO_RETURN 6
#define SSL_ERROR_WANT_CONNECT 7
+#define SSL_ERROR_WANT_ACCEPT 8
#define SSL_CTRL_NEED_TMP_RSA 1
#define SSL_CTRL_SET_TMP_RSA 2
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
index fec98dd8f4..ed2b820984 100644
--- a/ssl/ssl_lib.c
+++ b/ssl/ssl_lib.c
@@ -1543,6 +1543,8 @@ int SSL_get_error(SSL *s,int i)
reason=BIO_get_retry_reason(bio);
if (reason == BIO_RR_CONNECT)
return(SSL_ERROR_WANT_CONNECT);
+ else if (reason == BIO_RR_ACCEPT)
+ return(SSL_ERROR_WANT_ACCEPT);
else
return(SSL_ERROR_SYSCALL); /* unknown */
}
@@ -1561,6 +1563,8 @@ int SSL_get_error(SSL *s,int i)
reason=BIO_get_retry_reason(bio);
if (reason == BIO_RR_CONNECT)
return(SSL_ERROR_WANT_CONNECT);
+ else if (reason == BIO_RR_ACCEPT)
+ return(SSL_ERROR_WANT_ACCEPT);
else
return(SSL_ERROR_SYSCALL);
}