Hi,

Is there a way to tell curl to do connection caching per IP instead of per-host?
i.e. can I tell it to check its cache only *after* my OPENSOCKET_FUNCTION 
callback is invoked (which might change the IP)?

Background:

Given an https://example.com/something URL, where example.com points to 
multiple IP addresses
I want to be able to choose which IP address to connect to (for various 
reasons).

If this was HTTP it would be easy: just use the IP in the URL. However if I do 
that with HTTPS then certificate verification
fails as expected. I could turn off SSL_VERIFYHOST and do the verification 
myself, but I'd have to duplicate all of curl's
hostname verification logic and I'd rather not do that...

My current workaround is:
 * keep the domain name in the URL: https://example.com/something
 * override the IP address either by:
     * using CURLOPT_RESOLVE example.com:443:127.0.1.1
     * using CURLOPT_OPENSOCKETFUNCTION and changing the data in the *address 
pointer to point to my IP (127.0.1.1 in this example)
 * SSL verification succeeds now (its using the domain name from the URL)

However this stops working as soon as I try to connect to more than one IP 
address with same hostname,with the multi interface:
 * 1st call: OPENSOCKETFUNCTION callback changes IP for example.com to 
127.0.1.1, this works
 * next URL https://example.com, but I want to use 127.0.1.2 now
 * curl will reuse the connection from the first IP (127.0.1.1) I've given it, 
and won't call my opensocket callback anymore

I could use CURLOPT_FRESHCONNECT to force a new connection, but then I won't be 
able to reuse my connection
with 127.0.1.1 ever. Would it help if I return the cached socket from 
OPENSOCKETFUNCTION callback,
 and CURL_SOCKOPT_ALREADY_CONNECTED from CURLOPT_SOCKOPT_FUNCTION?

Thanks,
--Edwin

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to