Re: curl_easy_perform hangs in poll

Daniel Stenberg via curl-library <[email protected]> Fri, 5 Jun 2026 10:13:00 +0200 (CEST)
Newsgroups gmane.comp.web.curl.library
Message-ID <[email protected]>
On Thu, 4 Jun 2026, Wyatt Ayers via curl-library wrote:

> I'm looking into an issue I am observing when running curl_easy_perform in a 
> loop. After some amount of iterations, the program becomes stuck inside of 
> poll.

That's curl waiting for more data to arrive.

> I've so far tested this with an FTP server via vsftpd v2.3.4 using curl 
> v8.20. I tested on a fedora linux machine I initially thought this was 
> related to my use of CURLOPT_FORBID_REUSE = 1, but I reproduced this 
> behavior using CURLOPT_FRESH_CONNECT = 1 instead (i.e. FRESH_CONNECT = 1, 
> FORBID_REUSE = 0).

The only connection FTP transfers can reuse is the control connection and that 
is not what makes the data transfer, so it seems unlikely to make a difference 
here. It is your data transfer connection that seems to stall.

> I can't say for certain whether or not this is a bug with my ancient FTP 
> server. I can get around the hang by using a nonzero CURLOPT_TIMEOUT, though 
> this is not addressing the root cause.

Wiresharking the network could tell you if the server sent the whole data 
chunk and closed the connection correctly: if it did, then it is a curl 
problem. Otherwise it is a server problem. But nobody else has reported such a 
problem with curl so that would surprise me.

> I've included the source of a simple C program to reproduce this and a 
> logfile produced with CURLOPT_VERBOSE. After a while of being in this state, 
> I observe with netstat that the client machine has a socket to port 21 on 
> the server machine that is in a CLOSE_WAIT state.

Port 21 is the control connection, over which curl wants the final 
confirmation once the transfer is done so if that is closed, that's a good 
sign something is off. curl certainly does not close that connection until 
after the transfer is completed.

> Is this a problem seen elsewhere?

Not to my knowledge.

> I'm curious if this is a misuse of the curl_easy API

I couldn't see any obvious problems (apart from you not insisting on the 
setopt args to be 'long' but I don't think that's the problem here).

> if I ought to use the curl_multi API for this "many repeat transfers" task.

You don't have to, but you can.

-- 

  / daniel.haxx.se || https://rock-solid.curl.dev
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html