diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-24 23:41:01 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-24 23:41:01 +0000 |
commit | 2c81bcd1677ef4237c84462cbf2c5ff02301a46f (patch) | |
tree | 88eb9e4a6829f50319410899fb929ed921e3d232 /net | |
parent | 9df334c1c572250320fdb994f7b7293131be9940 (diff) | |
download | chromium_src-2c81bcd1677ef4237c84462cbf2c5ff02301a46f.zip chromium_src-2c81bcd1677ef4237c84462cbf2c5ff02301a46f.tar.gz chromium_src-2c81bcd1677ef4237c84462cbf2c5ff02301a46f.tar.bz2 |
Enable TCP Keep-Alive packets for Windows.
45s until first TCP Keep-Alive and 45s in between keep alives.
BUG=27400
TEST=Run Wireshark, make sure TCP Keep-Alive packets are sent.
Review URL: http://codereview.chromium.org/6300013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72421 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/socket/tcp_client_socket_win.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/net/socket/tcp_client_socket_win.cc b/net/socket/tcp_client_socket_win.cc index e8b2f53..b535636 100644 --- a/net/socket/tcp_client_socket_win.cc +++ b/net/socket/tcp_client_socket_win.cc @@ -4,6 +4,8 @@ #include "net/socket/tcp_client_socket_win.h" +#include <mstcpip.h> + #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory_debug.h" @@ -731,10 +733,27 @@ int TCPClientSocketWin::SetupSocket() { // http://technet.microsoft.com/en-us/library/bb726981.aspx const BOOL kDisableNagle = TRUE; int rv = setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, - reinterpret_cast<const char*>(&kDisableNagle), sizeof(kDisableNagle)); + reinterpret_cast<const char*>(&kDisableNagle), + sizeof(kDisableNagle)); DCHECK(!rv) << "Could not disable nagle"; - // Disregard any failure in disabling nagle. + // Enable TCP Keep-Alive to prevent NAT routers from timing out TCP + // connections. See http://crbug.com/27400 for details. + + struct tcp_keepalive keepalive_vals = { + 1, // TCP keep-alive on. + 45000, // Wait 45s until sending first TCP keep-alive packet. + 45000, // Wait 45s between sending TCP keep-alive packets. + }; + DWORD bytes_returned = 0xABAB; + rv = WSAIoctl(socket_, SIO_KEEPALIVE_VALS, &keepalive_vals, + sizeof(keepalive_vals), NULL, 0, + &bytes_returned, NULL, NULL); + DCHECK_EQ(0u, bytes_returned); + DCHECK(!rv) << "Could not enable TCP Keep-Alive for socket: " << socket_ + << " [error: " << WSAGetLastError() << "]."; + + // Disregard any failure in disabling nagle or enabling TCP Keep-Alive. return 0; } |