Thanks Daniel and Ray for the quick response. My use-case is similar to https://github.com/curl/curl/issues/4839 where I created a library like a HTTP2 transport for upper application to send HTTP requests. We have a logic like this: 1. Open a new HTTP2 connection by creating an HTTP GET to an url path. I created a CURLM object and added the easy handle for HTTP GET Request to it. 2. Next HTTP request will be sent in the HTTP2 connection created by step 1. I created a new easy handle for this request and added it to CURLM object created in step 1. 3. After a few hours or less, the connection at step 1 will be closed by server side (due to idle timeout or TTL). The server will send a GOAWAY frame to start Graceful shutdown before explicitly closing it after 60s so that both Client and Server could finish their in-flight transferring. 4. My library needs to detect the connection is closed and reopen a new one (step 1).
So I have a problem at step 2: - If the connection created by step 1 received a GOAWAY frame, cURL will open a new HTTP2 to send the next HTTP request. The new HTTP2 request will fail because there is some logic check at server side to ensure only connection created by step 1 is allowed. I believe this is odd checking but that is the logic from the server side and I could not change it. Currently, my library hooks to CURLOPT_CLOSESOCKETFUNCTION to detect when the connection is closed but it is quite late (after Graceful shutdown window expired). So I seek a hook in the GOAWAY frame to signal my application so I could proactively create a new HTTP2 connection. For example, what happens when curl stops the transfer (successfully) > before the GOAWAY is read? I believe this is not the case in my application. We used HTTP2 as a long-live single persistence connection so the GOAWAY will be sent before closing the connection (assume no network failure here). Also, to complicate matters, GOAWAY also exists for QUIC/h3. Can we have this option specific to HTTP2 to reduce blast radius? I learnt that we have some options like UPKEEP to send ping frames in HTTP2 (not correctly but seems only HTTP2 support it), could we add a similar option to GOAWAY? On Fri, Jan 5, 2024 at 12:10 AM Daniel Stenberg <[email protected]> wrote: > On Thu, 4 Jan 2024, Cao Duc Quan via curl-library wrote: > > > I am working on a small project where I need a callback from CURM when > it > > receives the GOAWAY frame. I prepared a patch as follows and could get > the > > callback for GOAWAY > > Please explain with more words why you need this and what it is for. I'm > asking because this is a frame that it feels fragile to build > infrastructure > around. For example, what happens when curl stops the transfer > (successfully) > before the GOAWAY is read? > > Also, to complicate matters, GOAWAY also exists for QUIC/h3. > > -- > > / daniel.haxx.se > | Commercial curl support up to 24x7 is available! > | Private help, bug fixes, support, ports, new features > | https://curl.se/support.html > -- -------------------------------- Watson Cao VN: (+84) 0976574864 CA: (+1) 2368658864
-- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html
