<div dir="auto">Hi Liviu,<div dir="auto"><br><div dir="auto">Is it possible to suspend the transaction and resume it once we somehow get the event from libcurl as soon as the connect is done? </div><div dir="auto">Im imagining the way usually APNS is done these days. The only thing missing here is the event from the rest_client ! </div><div dir="auto"><br></div><div dir="auto">Can this mechanism help with the problem of backlog on the opensips thread ? </div><div dir="auto"><br></div><div dir="auto">Best Regards,</div><div dir="auto">Sammy</div><br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Wed., Jun. 26, 2019, 9:23 a.m. Liviu Chircu, <<a href="mailto:liviu@opensips.org">liviu@opensips.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <p><tt>It's the same process doing both the connect and the
        transfer.  The problem is that libcurl, as it stands now,<br>
        is not able to give me a file descriptor to poll on, until it
        connects [1].  See this section:<br>
        <br>
        "When libcurl returns -1 in max_fd, it is because libcurl
        currently does something that isn't possible<br>
        for your application to monitor with a socket and unfortunately
        you can then not know exactly when the<br>
        current action is completed using select(). You then need to
        wait a while before you proceed and call<br>
        curl_multi_perform anyway. How long to wait? Unless
        curl_multi_timeout gives you a lower number, we<br>
        suggest 100 milliseconds or so, but you may want to test it out
        in your own particular conditions to<br>
        find a suitable value."</tt></p>
    <p><tt>Regarding your issue: I would investigate further the reason
        why the connect is hanging, and not getting<br>
        rejected immediately when your server is down.  That would solve
        all your blocking issues.</tt></p>
    <p><tt>The same with MySQL connections which go down: only after the
        connection is up are we able to obtain<br>
        its file descriptor to asynchronously poll on.  So if connect to
        DB_HOST:3306 hangs, so will OpenSIPS.<br>
      </tt></p>
    <p><tt>Regards,<br>
      </tt></p>
    <p><tt>[1]: </tt><tt><a href="https://curl.haxx.se/libcurl/c/curl_multi_fdset.html" target="_blank" rel="noreferrer">https://curl.haxx.se/libcurl/c/curl_multi_fdset.html</a></tt></p>
    <pre class="m_471880913182993764moz-signature" cols="72">Liviu Chircu
OpenSIPS Developer
<a class="m_471880913182993764moz-txt-link-freetext" href="http://www.opensips-solutions.com" target="_blank" rel="noreferrer">http://www.opensips-solutions.com</a></pre>
    <div class="m_471880913182993764moz-cite-prefix">On 25.06.2019 18:41, Ben Newlin wrote:<br>
    </div>
    <blockquote type="cite"><span style="font-size:11.0pt">but I guess my question would be why
        isn’t the entire operation run in async? Why must the connect be
        performed in the current process and only the transfer be in
        another process?</span></blockquote>
  </div>

_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank" rel="noreferrer">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div></div></div>