I worked on this issue, this seems only occur when there’s multiplex on a 
socket with connection re-usage, you can try to disable connection reusage by 
CURLOPT_FORBID_REUSE,  I’ll follow up in Github with a more detailed issue post 
soon.

Here is some known issue seems related, but the detail doesn’t match exactly 
what I see
https://github.com/curl/curl/issues/6936
https://github.com/curl/curl/issues/5611



  *   Yongkang

From: Jason Qian <[email protected]>
Date: Friday, October 29, 2021 at 7:01 AM
To: libcurl development <[email protected]>
Cc: Yongkang Huang <[email protected]>
Subject: Re: How to debug cULR multi handle timeout caused by not writing to 
socket
Hi  Yongkang,

I have run into the same issue as you described. Please let me know if you got 
solution.


Thanks
Jason

On Tue, Oct 26, 2021 at 7:59 PM Yongkang Huang via curl-library 
<[email protected]<mailto:[email protected]>> wrote:
Following the previous email, I know that’s a high level description, but how 
could I debug with more visibility?

Thanks in advance!

From: Yongkang Huang <[email protected]<mailto:[email protected]>>
Date: Tuesday, October 26, 2021 at 4:57 PM
To: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Subject: How to debug cULR multi handle timeout caused by not writing to socket
Hi!

Following the thread I sent previously, now I’m working on an application that 
structured as the following way


  1.  A thread holds a static curl multi handle and running as the event base
  2.  When there’s a user request to do a HTTP call, a easy handle would be 
created and passing to the thread holding the curl multi handle.
  3.  The curl multi thread will add the easy handle to the multi handle, and 
drive the IO with the event base.
  4.  Once a request finished, return the easy handle to the thread dealing 
with user request
This model working fine when I do the request sequentially on a single thread 
with user traffic, but when there’s multiple request scheduled concurrently, 
there’s a wired bug that the write to a socket would stuck until a timeout 
finished (tcpdump shows a the tcp stuck on sending the application data instead 
of waiting for remote ack), usually it’s either the connect timeout we set to 
connect to proxy, or the total timeout without the connect timeout. For example 
if the connect timeout is 10s, and total timeout is 30, a lot of request will 
finished in 10 second or 20 seconds, even waiting indefinitely until the total 
timeout passed.


--
Unsubscribe: 
https://lists.haxx.se/listinfo/curl-library<https://lists.haxx.se/listinfo/curl-library>
Etiquette:   
https://curl.haxx.se/mail/etiquette.html<https://curl.haxx.se/mail/etiquette.html>
-- 
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to