diff options
author | mbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 22:38:04 +0000 |
---|---|---|
committer | mbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 22:38:04 +0000 |
commit | d3f665783018ad6832b224d108640a0be2b1f248 (patch) | |
tree | 6634df109ace1c2df58fccf8ff4d9569ec3a5cd9 /net/socket/tcp_client_socket_win.cc | |
parent | 87fce2b91c8fa1f10ec49e79c719159097a597c5 (diff) | |
download | chromium_src-d3f665783018ad6832b224d108640a0be2b1f248.zip chromium_src-d3f665783018ad6832b224d108640a0be2b1f248.tar.gz chromium_src-d3f665783018ad6832b224d108640a0be2b1f248.tar.bz2 |
Add methods for setting socket buffers to the Socket
class.
Also add a few stats counters for TCP read/write stats.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/199048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25803 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/tcp_client_socket_win.cc')
-rw-r--r-- | net/socket/tcp_client_socket_win.cc | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/net/socket/tcp_client_socket_win.cc b/net/socket/tcp_client_socket_win.cc index de3cac6..a7a8094 100644 --- a/net/socket/tcp_client_socket_win.cc +++ b/net/socket/tcp_client_socket_win.cc @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory_debug.h" +#include "base/stats_counters.h" #include "base/string_util.h" #include "base/sys_info.h" #include "base/trace_event.h" @@ -239,6 +240,9 @@ int TCPClientSocketWin::Connect(CompletionCallback* callback) { if (socket_ != INVALID_SOCKET) return OK; + static StatsCounter connects("tcp.connect"); + connects.Increment(); + TRACE_EVENT_BEGIN("socket.connect", this, ""); const struct addrinfo* ai = current_ai_; DCHECK(ai); @@ -386,6 +390,8 @@ int TCPClientSocketWin::Read(IOBuffer* buf, // false error reports. // See bug 5297. base::MemoryDebug::MarkAsInitialized(core_->read_buffer_.buf, num); + static StatsCounter read_bytes("tcp.read_bytes"); + read_bytes.Add(num); return static_cast<int>(num); } } else { @@ -409,6 +415,9 @@ int TCPClientSocketWin::Write(IOBuffer* buf, DCHECK_GT(buf_len, 0); DCHECK(!core_->write_iobuffer_); + static StatsCounter reads("tcp.writes"); + reads.Increment(); + core_->write_buffer_.len = buf_len; core_->write_buffer_.buf = buf->data(); @@ -422,6 +431,8 @@ int TCPClientSocketWin::Write(IOBuffer* buf, if (rv == 0) { if (ResetEventIfSignaled(core_->write_overlapped_.hEvent)) { TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", num)); + static StatsCounter write_bytes("tcp.write_bytes"); + write_bytes.Add(num); return static_cast<int>(num); } } else { @@ -436,6 +447,20 @@ int TCPClientSocketWin::Write(IOBuffer* buf, return ERR_IO_PENDING; } +bool TCPClientSocketWin::SetReceiveBufferSize(int32 size) { + int rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF, + reinterpret_cast<const char*>(&size), sizeof(size)); + DCHECK(!rv) << "Could not set socket receive buffer size: " << GetLastError(); + return rv == 0; +} + +bool TCPClientSocketWin::SetSendBufferSize(int32 size) { + int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF, + reinterpret_cast<const char*>(&size), sizeof(size)); + DCHECK(!rv) << "Could not set socket send buffer size: " << GetLastError(); + return rv == 0; +} + int TCPClientSocketWin::CreateSocket(const struct addrinfo* ai) { socket_ = WSASocket(ai->ai_family, ai->ai_socktype, ai->ai_protocol, NULL, 0, WSA_FLAG_OVERLAPPED); @@ -459,15 +484,9 @@ int TCPClientSocketWin::CreateSocket(const struct addrinfo* ai) { base::SysInfo::OperatingSystemVersionNumbers(&major_version, &minor_version, &fix_version); if (major_version < 6) { - const int kSocketBufferSize = 64 * 1024; - int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF, - reinterpret_cast<const char*>(&kSocketBufferSize), - sizeof(kSocketBufferSize)); - DCHECK(!rv) << "Could not set socket send buffer size"; - rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF, - reinterpret_cast<const char*>(&kSocketBufferSize), - sizeof(kSocketBufferSize)); - DCHECK(!rv) << "Could not set socket receive buffer size"; + const int32 kSocketBufferSize = 64 * 1024; + SetReceiveBufferSize(kSocketBufferSize); + SetSendBufferSize(kSocketBufferSize); } // Disable Nagle. @@ -504,6 +523,9 @@ void TCPClientSocketWin::DoReadCallback(int rv) { DCHECK_NE(rv, ERR_IO_PENDING); DCHECK(read_callback_); + static StatsCounter read_bytes("tcp.read_bytes"); + read_bytes.Add(rv); + // since Run may result in Read being called, clear read_callback_ up front. CompletionCallback* c = read_callback_; read_callback_ = NULL; @@ -514,6 +536,9 @@ void TCPClientSocketWin::DoWriteCallback(int rv) { DCHECK_NE(rv, ERR_IO_PENDING); DCHECK(write_callback_); + static StatsCounter write_bytes("tcp.write_bytes"); + write_bytes.Add(rv); + // since Run may result in Write being called, clear write_callback_ up front. CompletionCallback* c = write_callback_; write_callback_ = NULL; |