Re: Retrieving the local address between connect() and HTTP
Date: Sun, 26 Apr 2020 16:10:25 -0400
On 4/26/2020 10:40 AM, Jean-Francois Dockes via curl-library wrote:
> My apologies if this is a frequent question, I could not find an answer.
>
> It would be convenient for me to retrieve the local address of the
> connected socket used for an HTTP GET before the HTTP transaction
> begins.
>
> The pseudo HTTP protocol which my code implements (UPnP) needs to set a
> HTTP header which contains a callback URL for the remote host to send
> events to. In case the local machine has multiple interfaces, the easiest
> way to build an URL which the remote is guaranteed to be able to connect to
> seems to be just using the connected socket local address.
>
> Unfortunately, it seems that the two callbacks in this area,
> CURLOPT_SOCKOPTFUNCTION and CURLOPT_OPENSOCKETFUNCTION, occur before the
> socket is connected.
>
> I could connect the socket myself (losing the nice CURL code which does it
> for me), or find another way to derive the right interface from the
> remote address I am connecting to, but a getsockname() on the connected
> socket would be much simpler. So I was hoping that there was a way.
>
> This is assuming that I can call CURLOPT_HTTPHEADER from this point, which
> may also not be the case. So, questions...
I don't think that is possible without doing the connect yourself. There
is CURLINFO_ACTIVESOCKET [1] but it doesn't set the socket until the
transfer is done. It is really meant to be used with
CURLOPT_CONNECT_ONLY [2].
Try doing the connection yourself, set CURLOPT_HTTPHEADER and then in
CURLOPT_SOCKOPTFUNCTION [3] return CURL_SOCKOPT_ALREADY_CONNECTED.
[1]: https://curl.haxx.se/libcurl/c/CURLINFO_ACTIVESOCKET.html
[2]: https://curl.haxx.se/libcurl/c/CURLOPT_CONNECT_ONLY.html
[3]: https://curl.haxx.se/libcurl/c/CURLOPT_SOCKOPTFUNCTION.html
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2020-04-26