static void io_destroy(glb_ctx *cc, io_handler *io)
 {
     io_handler *io_cc = (io_handler*) io;
-    int err = 0;
 
     if (io_cc->s_ctx) {
         if (io_cc->s_ctx->ssl_io) {
             SSL_free(io_cc->s_ctx->ssl_io);
             io_cc->s_ctx->ssl_io = NULL;
         }
-        if (io_cc->s_ctx->bio_conn) {
-            err = BIO_free(io_cc->s_ctx->bio_conn);
-            io_cc->s_ctx->bio_conn = NULL;
-        }
     }
     free (io_cc->s_ctx);
     io_cc->s_ctx = NULL;
 
     flags = fcntl(io->sock, F_GETFL, 0);
     (void)fcntl(io->sock, F_SETFL, flags | O_NONBLOCK);
 
-    io->s_ctx->bio_conn = BIO_new_socket(io->sock, BIO_NOCLOSE);
-    (void)BIO_set_nbio(io->s_ctx->bio_conn,1);
-
     io->s_ctx->ssl_io = SSL_new(cc->ssl_ctx);
     //setup_SSL_proxy_handler(cc->ssl_ctx, cacertdir);
-    SSL_set_bio(io->s_ctx->ssl_io, io->s_ctx->bio_conn, io->s_ctx->bio_conn);
-
-    io->s_ctx->bio_conn = NULL;
+    SSL_set_fd(io->s_ctx->ssl_io, io->sock);
 
     err = do_ssl_connect(cc, io, timeout); 
     if (err) {
     flags = fcntl(io->sock, F_GETFL, 0);
     (void)fcntl(io->sock, F_SETFL, flags | O_NONBLOCK);
 
-    io->s_ctx->bio_conn = BIO_new_socket(io->sock, BIO_NOCLOSE);
-    (void)BIO_set_nbio(io->s_ctx->bio_conn,1);
-
     io->s_ctx->ssl_io = SSL_new(cc->ssl_ctx);
     //setup_SSL_proxy_handler(cc->ssl_ctx, cacertdir);
-    SSL_set_bio(io->s_ctx->ssl_io, io->s_ctx->bio_conn, 
-            io->s_ctx->bio_conn);
+    SSL_set_fd(io->s_ctx->ssl_io, io->sock);
 
     err = do_ssl_accept(cc, io, timeout);
         if (err) {