summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2020-07-10 13:14:33 -0400
committerNick Mathewson <nickm@torproject.org>2020-07-10 13:14:33 -0400
commit40eb6b19a33f1261168e5d64ba162d6f7d80e5a1 (patch)
tree3094d38e299831d65b56269a37929e80c2253db7 /src
parentc9751e26119e375fcbc74107e89958957c00ee5e (diff)
downloadtor-40eb6b19a33f1261168e5d64ba162d6f7d80e5a1.tar.gz
tor-40eb6b19a33f1261168e5d64ba162d6f7d80e5a1.zip
NSS: Tell NSS that our SSL sockets are nonblocking.
Closes ticket 40035.
Diffstat (limited to 'src')
-rw-r--r--src/lib/tls/tortls_nss.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/tls/tortls_nss.c b/src/lib/tls/tortls_nss.c
index 1436442e1c..6f6c47674e 100644
--- a/src/lib/tls/tortls_nss.c
+++ b/src/lib/tls/tortls_nss.c
@@ -418,6 +418,16 @@ tor_tls_new(tor_socket_t sock, int is_server)
return NULL;
}
+ /* even if though the socket is already nonblocking, we need to tell NSS
+ * about the fact, so that it knows what to do when it says EAGAIN. */
+ PRSocketOptionData data;
+ data.option = PR_SockOpt_Nonblocking;
+ data.value.non_blocking = 1;
+ if (PR_SetSocketOption(ssl, &data) != PR_SUCCESS) {
+ PR_Close(ssl);
+ return NULL;
+ }
+
tor_tls_t *tls = tor_malloc_zero(sizeof(tor_tls_t));
tls->magic = TOR_TLS_MAGIC;
tls->context = ctx;