Hi all,

I want to implement a http connection pool with libcurl. My design is something 
like this:
1. There are N (say 3) CURL handles in the pool, connecting to the same 
server(say 1.1.1.1 80) simutaneously. All curl handle is managed by a CURLM 
handle for I want to use async perfmorn.
2. At the very beginning, everything goes fine. The CURLM create 3 tcp 
connection to 1.1.1.1:80, each for one CURL handle.
3. The pool will send keepalive request periodically to the server(1.1.1.1:80) 
in case that the sever close the connection. But I cannot let all CURL handles 
to send keepalive request at the same time, 
      otherwise cause a deny of service(no idle CURL handle to use), if 
happened to that the user(client which use the pool) need one CURL handle
4. As time pass by, some underlying TCP connection was close by the server. The 
periodic keepalive request fail to save the underlying TCP connection due to 
libcurl will reuse existing connection, 
      which leads to one connection(in this case) never send keepalive request 
to server.


What I have tried:
1. I tried to bind the underlying curl_socket_t with a CURL handle(with 
CURLINFO_ACTIVESOCKET option), the it change then force CURL to create a new 
connection(with CURLOPT_FRESH_CONNECT),
but fail due to each time CURL may reuse to a different socket(corresponding to 
a different connection). It almost create a new connection all the time, making 
it meaningless as a pool.


2. I also try to record the ip addr of the closing connection(with 
CURLOPT_CLOSESOCKETFUNCTION), and then force a new connection when send a 
keepalive request. But It takes some 
effort to mantains the information.


Another "easy" approach is if we can set the resuse policy of existing 
connections to Round Robin, it seems everything goes well.
But I fail to find out any stuff about the reusing policy. Is it possible to do 
this? And what's best practise for the scenario that I faced?






--

Best wishes!

--------------------------------------------------------------------------------------------------------

watermoon

Email: watermoon3...@163.com
-- 
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to