Hi, I would like to ideally use non-blocking SSL_read and blocking SSL_write. Is this possible with BIO_set_nbio? What should the underlying socket be in that case?
If this is not possible, as I suspect, i have the problem that the non-blocking SSL_write with select, will stall after first SSL_error of SSL_ERROR_WANT_READ || SSL_ERROR_WANT_WRITE without ever writing the data: while(((select(fd + 1, NULL, &rset, NULL, &alarm)) > 0) && FD_ISSET(fd, &rset)) { res = SSL_write(ssl, input, len); if (res == -1) { SSL_error = SSL_get_error(ssl, res); printf("SSL_error = %d\n", SSL_error); if (SSL_error != SSL_ERROR_WANT_READ && SSL_error != SSL_ERROR_WANT_WRITE) return(-1); else FD_CLR(fd, &rset); } else return(res); } My only solution so far has been to use the non-blocking SSL_write as a blocking one, but it is terribly inefficient, looping as many as 50 times before writing the data: while((ret = SSL_write(ssl, request->data, request->len)) < 0) { SSL_error = SSL_get_error(ssl, ret); if (SSL_error != SSL_ERROR_WANT_READ && SSL_error != SSL_ERROR_WANT_WRITE) break; thr_yield(); } Any ideas? TIA, Nikos