Index: include/curl/multi.h =================================================================== RCS file: /reciva/proj/InternetRadio/cvs/curl/include/curl/multi.h,v retrieving revision 1.2 diff -u -r1.2 multi.h --- include/curl/multi.h 16 Mar 2008 20:31:56 -0000 1.2 +++ include/curl/multi.h 16 Jun 2008 14:46:11 -0000 @@ -261,6 +261,8 @@ CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, int *running_handles); +CURL_EXTERN void curl_multi_reap_idle_connections(CURLM *multi_handle, int seconds); + #ifndef CURL_ALLOW_OLD_MULTI_SOCKET /* This macro below was added in 7.16.3 to push users who recompile to use the new curl_multi_socket_action() instead of the old curl_multi_socket() Index: lib/multi.c =================================================================== RCS file: /reciva/proj/InternetRadio/cvs/curl/lib/multi.c,v retrieving revision 1.3 diff -u -r1.3 multi.c --- lib/multi.c 16 Mar 2008 20:31:57 -0000 1.3 +++ lib/multi.c 16 Jun 2008 14:58:57 -0000 @@ -1582,6 +1582,14 @@ return CURLM_BAD_HANDLE; } +void curl_multi_reap_idle_connections(CURLM *multi_handle, int seconds) +{ + struct Curl_multi *multi=(struct Curl_multi *)multi_handle; + struct conncache *connc = multi->connc; + + return Curl_reap_connc (connc, seconds * 1000); +} + CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; Index: lib/url.c =================================================================== RCS file: /reciva/proj/InternetRadio/cvs/curl/lib/url.c,v retrieving revision 1.5 diff -u -r1.5 url.c --- lib/url.c 17 Mar 2008 14:30:58 -0000 1.5 +++ lib/url.c 16 Jun 2008 14:59:47 -0000 @@ -633,6 +633,34 @@ free(c); } +int Curl_reap_connc(struct conncache *connc, int ms) +{ + struct timeval now; + long i; + struct connectdata *conn; + int found = 0; + + now = Curl_tvnow(); + + for(i=0; i < connc->num; i++) { + conn = connc->connects[i]; + + if (conn) + found++; + + if(!conn || conn->inuse) + continue; + + if (Curl_tvdiff(now, conn->now) >= ms) { + conn_free(conn); + connc->connects[i] = NULL; + } + } + + return found; +} + + /** * Curl_open() * Index: lib/url.h =================================================================== RCS file: /reciva/proj/InternetRadio/cvs/curl/lib/url.h,v retrieving revision 1.3 diff -u -r1.3 url.h --- lib/url.h 16 Mar 2008 20:31:58 -0000 1.3 +++ lib/url.h 16 Jun 2008 14:59:06 -0000 @@ -52,6 +52,8 @@ struct conncache *Curl_mk_connc(int type, long amount); /* free a connection cache */ void Curl_rm_connc(struct conncache *c); +/* free idle connections in the cache */ +int Curl_reap_connc(struct conncache *connc, int ms); /* Change number of entries of a connection cache */ CURLcode Curl_ch_connc(struct SessionHandle *data, struct conncache *c,