<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Consider the following code:<br>
    <br>
    (define cert-chain "/opt/dozor/smap/config/httpd/server.crt")<br>
    (define cert-root "/opt/dozor/smap/config/httpd/server.crt")<br>
    (define cert-sca "/opt/dozor/smap/config/httpd/server.crt")<br>
    (define key "/opt/dozor/smap/config/httpd/server.key")<br>
    (let-values (((in-raw out-raw) (tcp-connect "localhost" 8052)))<br>
    (let-values (((in out)<br>
    (let ((ctx (ssl-make-client-context)))<br>
    (ssl-load-certificate-chain! ctx cert-chain)<br>
    (ssl-load-verify-root-certificates! ctx cert-root)<br>
    (ssl-load-suggested-certificate-authorities! ctx cert-sca)<br>
    (ssl-set-verify! ctx #t)<br>
    (ssl-load-private-key! ctx key)<br>
    (ports-&gt;ssl-ports in-raw out-raw<br>
    #:mode 'connect<br>
    #:context ctx<br>
    #:close-original? #t<br>
    #:shutdown-on-close? #f))))<br>
    (fprintf out "GET <a
      href="https://localhost:8052/cgi-bin/rc/iface.scm">https://localhost:8052/cgi-bin/rc/iface.scm</a>
    HTTP/1.0\r\n\r\n")<br>
    (flush-output out)<br>
    (read-line in)))<br>
    <br>
    Raw ports were wrapped with SSL successfully, but then program has
    hung up between 2 last actions: sending the request to server and
    reading its reply. Further investigation showed that in the course
    of SSL processing the server had requested session renegotiation
    from the client and would provide it with requested data if the
    client sent negotiation info to server. After looking inside <b>make-ssl-input-port
    </b>(see the code below) <br>
    <br>
           (letrec ([do-read<br>
             (lambda (buffer)<br>
               (let ([out-blocked? (pump-output mzssl)]<br>
                 [len (or must-read-len (min (bytes-length xfer-buffer)<br>
                                 (bytes-length buffer)))])<br>
                 (let ([n (SSL_read (mzssl-ssl mzssl) xfer-buffer len)])<br>
    <br>
    we found that control flow cannot reach <b>SSL_read</b> call it is
    blocked by <b>pump-output</b> call. Unfortunately, we do not fully
    understand what is going on inside <b>pump-output</b>...<br>
    <pre class="moz-signature" cols="72">-- 
Best regards,
Timur</pre>
  </body>
</html>