summaryrefslogtreecommitdiffstats
path: root/net/socket/tcp_client_socket_win.cc
diff options
context:
space:
mode:
authormbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-09 22:38:04 +0000
committermbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-09 22:38:04 +0000
commitd3f665783018ad6832b224d108640a0be2b1f248 (patch)
tree6634df109ace1c2df58fccf8ff4d9569ec3a5cd9 /net/socket/tcp_client_socket_win.cc
parent87fce2b91c8fa1f10ec49e79c719159097a597c5 (diff)
downloadchromium_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.cc43
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;