TCP_KEEPINVTL and TCP_KEEPIDLE - Socket Keep Alives not working

Cary Lewis cary.lewis@gmail.com
Tue Jun 30 13:46:56 GMT 2020


Thanks for the reply. The answer to your question is that the 2 hour keep
alive was not sufficient for a particular use case I encountered.

I was trying to use curl under cygwin to access a very slow REST endpoint
that was taking up to 8 minutes to generate download before any data flowed
back to the client. This caused the server to abort the socket.

Accessing the endpoint in chrome or firefox revealed that they set a
keepalive to 45 seconds, which kept the server happy.

Attempting to set --keepalive-time=45 in cygwin's curl didn't work, and
wireshark revealed that no keepalives were being sent.

I will attempt to patch cygwin, I got the build to work. Can you point me
in the right direction, in terms of where the socket calls get mapped to
the winsock calls?

On a separate note, what are your thoughts on the new windows WSL2 release?
Do you think this will have long term implications for cygwin?


On Tue, Jun 30, 2020 at 7:15 AM Corinna Vinschen <corinna-cygwin@cygwin.com>
wrote:

> On Jun  7 14:56, Cary Lewis via Cygwin wrote:
> > Thanks very much for the reply - I will wait for Corinna's take on this
> as
> > well - the patch shouldn't be too hard.
>
> It's not that easy, but not too hard either:
>
> - Windows 10 1709 and later actually support the TCP_KEEPIDLE,
>   TCP_KEEPINTVL and TCP_KEEPCNT options natively, so all is fine here.
>
> - Older OS versions require the use of a single call
>   WSAIoctl(SIO_KEEPALIVE_VALS), while TCP_KEEPIDLE, TCP_KEEPINTVL and
>   TCP_KEEPCNT are three distinct calls, with TCP_KEEPCNT being no-op on
>   pre W10 1709.
>
> > In fact the source code for curl in the lib/connect.c file has code to
> > enable the winsock options, so hopefully that code could be helpful. I
>
> But, here's the question:
>
> Even if neither one of SIO_KEEPALIVE_VALS, TCP_KEEPIDLE, TCP_KEEPINTVL
> and TCP_KEEPCNT are available, curl *still* uses SO_KEEPALIVE to enable
> TCP keep-alive.  Given TCP keep-alive has default settings on Windows,
> too (2 hours, 1 sec, 10 times), and given SO_KEEPALIVE is supported on
> Cygwin as well, why isn't that sufficient?
>
> Keep in mind that none of the above WSAIoctl/setsockopt options are
> portable, only SO_KEEPALIVE is.  So why should that work on, say,
> Solaris, but not on Windows?
>
>
> Corinna
>
> --
> Corinna Vinschen
> Cygwin Maintainer
> --
> Problem reports:      https://cygwin.com/problems.html
> FAQ:                  https://cygwin.com/faq/
> Documentation:        https://cygwin.com/docs.html
> Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple
>


More information about the Cygwin mailing list