• Carlo Alberto Ferraris's avatar
    net: enable TCP keepalives by default · 5bd7e9c5
    Carlo Alberto Ferraris authored
    This is just the first step in attempting to make all network connection have
    timeouts as a "safe default". TCP keepalives only protect against certain
    classes of network and host issues (e.g. server/OS crash), but do nothing
    against application-level issues (e.g. an application that accepts connections
    but then fails to serve requests).
    
    The actual keep-alive duration (15s) is chosen to cause broken connections
    to be closed after 2~3 minutes (depending on the OS, see #23549 for details).
    We don't make the actual default value part of the public API for a number of
    reasons:
    - because it's not very useful by itself: as discussed in #23549 the actual
      "timeout" after which the connection is torn down is duration*(KEEPCNT+1),
      and we use the OS-wide value for KEEPCNT because there's currently no way
      to set it from Go.
    - because it may change in the future: if users need to rely on a specific
      value they should explicitly set this value instead of relying on the default.
    
    Fixes #23459
    
    Change-Id: I348c03be97588d5001e6de0f377e7a93b51957fd
    Reviewed-on: https://go-review.googlesource.com/c/107196
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    5bd7e9c5