Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/socket/tcp_socket_win.h" | 5 #include "net/socket/tcp_socket_win.h" |
| 6 | 6 |
| 7 #include <mstcpip.h> | 7 #include <mstcpip.h> |
| 8 | 8 |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 #include "net/base/winsock_util.h" | 21 #include "net/base/winsock_util.h" |
| 22 #include "net/socket/socket_descriptor.h" | 22 #include "net/socket/socket_descriptor.h" |
| 23 #include "net/socket/socket_net_log_params.h" | 23 #include "net/socket/socket_net_log_params.h" |
| 24 | 24 |
| 25 namespace net { | 25 namespace net { |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 const int kTCPKeepAliveSeconds = 45; | 29 const int kTCPKeepAliveSeconds = 45; |
| 30 | 30 |
| 31 bool SetSocketReceiveBufferSize(SOCKET socket, int32 size) { | 31 int SetSocketReceiveBufferSize(SOCKET socket, int32 size) { |
| 32 int rv = setsockopt(socket, SOL_SOCKET, SO_RCVBUF, | 32 int rv = setsockopt(socket, SOL_SOCKET, SO_RCVBUF, |
| 33 reinterpret_cast<const char*>(&size), sizeof(size)); | 33 reinterpret_cast<const char*>(&size), sizeof(size)); |
| 34 DCHECK(!rv) << "Could not set socket receive buffer size: " << GetLastError(); | 34 int net_error = (rv == 0) ? OK : MapSystemError(WSAGetLastError()); |
|
Ryan Hamilton
2014/04/08 19:55:11
Possibly again here with the map error code.
jar (doing other things)
2014/04/08 23:16:26
Since I'm not seeing any problems on Windows... I'
| |
| 35 return rv == 0; | 35 DCHECK(!rv) << "Could not set socket receive buffer size: " << net_error; |
| 36 return net_error; | |
| 36 } | 37 } |
| 37 | 38 |
| 38 bool SetSocketSendBufferSize(SOCKET socket, int32 size) { | 39 int SetSocketSendBufferSize(SOCKET socket, int32 size) { |
| 39 int rv = setsockopt(socket, SOL_SOCKET, SO_SNDBUF, | 40 int rv = setsockopt(socket, SOL_SOCKET, SO_SNDBUF, |
| 40 reinterpret_cast<const char*>(&size), sizeof(size)); | 41 reinterpret_cast<const char*>(&size), sizeof(size)); |
| 41 DCHECK(!rv) << "Could not set socket send buffer size: " << GetLastError(); | 42 int net_error = (rv == 0) ? OK : MapSystemError(WSAGetLastError()); |
|
Ryan Hamilton
2014/04/08 19:55:11
we could consider doing the DCHECK here too.
jar (doing other things)
2014/04/08 23:16:26
See above.
| |
| 42 return rv == 0; | 43 DCHECK(!rv) << "Could not set socket send buffer size: " << net_error; |
| 44 return net_error; | |
| 43 } | 45 } |
| 44 | 46 |
| 45 // Disable Nagle. | 47 // Disable Nagle. |
| 46 // The Nagle implementation on windows is governed by RFC 896. The idea | 48 // The Nagle implementation on windows is governed by RFC 896. The idea |
| 47 // behind Nagle is to reduce small packets on the network. When Nagle is | 49 // behind Nagle is to reduce small packets on the network. When Nagle is |
| 48 // enabled, if a partial packet has been sent, the TCP stack will disallow | 50 // enabled, if a partial packet has been sent, the TCP stack will disallow |
| 49 // further *partial* packets until an ACK has been received from the other | 51 // further *partial* packets until an ACK has been received from the other |
| 50 // side. Good applications should always strive to send as much data as | 52 // side. Good applications should always strive to send as much data as |
| 51 // possible and avoid partial-packet sends. However, in most real world | 53 // possible and avoid partial-packet sends. However, in most real world |
| 52 // applications, there are edge cases where this does not happen, and two | 54 // applications, there are edge cases where this does not happen, and two |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 | 594 |
| 593 BOOL true_value = 1; | 595 BOOL true_value = 1; |
| 594 int rv = setsockopt(socket_, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, | 596 int rv = setsockopt(socket_, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, |
| 595 reinterpret_cast<const char*>(&true_value), | 597 reinterpret_cast<const char*>(&true_value), |
| 596 sizeof(true_value)); | 598 sizeof(true_value)); |
| 597 if (rv < 0) | 599 if (rv < 0) |
| 598 return MapSystemError(errno); | 600 return MapSystemError(errno); |
| 599 return OK; | 601 return OK; |
| 600 } | 602 } |
| 601 | 603 |
| 602 bool TCPSocketWin::SetReceiveBufferSize(int32 size) { | 604 int TCPSocketWin::SetReceiveBufferSize(int32 size) { |
| 603 DCHECK(CalledOnValidThread()); | 605 DCHECK(CalledOnValidThread()); |
| 604 return SetSocketReceiveBufferSize(socket_, size); | 606 return SetSocketReceiveBufferSize(socket_, size); |
| 605 } | 607 } |
| 606 | 608 |
| 607 bool TCPSocketWin::SetSendBufferSize(int32 size) { | 609 int TCPSocketWin::SetSendBufferSize(int32 size) { |
| 608 DCHECK(CalledOnValidThread()); | 610 DCHECK(CalledOnValidThread()); |
| 609 return SetSocketSendBufferSize(socket_, size); | 611 return SetSocketSendBufferSize(socket_, size); |
| 610 } | 612 } |
| 611 | 613 |
| 612 bool TCPSocketWin::SetKeepAlive(bool enable, int delay) { | 614 bool TCPSocketWin::SetKeepAlive(bool enable, int delay) { |
| 613 return SetTCPKeepAlive(socket_, enable, delay); | 615 return SetTCPKeepAlive(socket_, enable, delay); |
| 614 } | 616 } |
| 615 | 617 |
| 616 bool TCPSocketWin::SetNoDelay(bool no_delay) { | 618 bool TCPSocketWin::SetNoDelay(bool no_delay) { |
| 617 return DisableNagle(socket_, no_delay); | 619 return DisableNagle(socket_, no_delay); |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 992 waiting_read_ = false; | 994 waiting_read_ = false; |
| 993 core_->read_iobuffer_ = NULL; | 995 core_->read_iobuffer_ = NULL; |
| 994 core_->read_buffer_length_ = 0; | 996 core_->read_buffer_length_ = 0; |
| 995 | 997 |
| 996 DCHECK_NE(rv, ERR_IO_PENDING); | 998 DCHECK_NE(rv, ERR_IO_PENDING); |
| 997 base::ResetAndReturn(&read_callback_).Run(rv); | 999 base::ResetAndReturn(&read_callback_).Run(rv); |
| 998 } | 1000 } |
| 999 | 1001 |
| 1000 } // namespace net | 1002 } // namespace net |
| 1001 | 1003 |
| OLD | NEW |