| Index: net/socket/tcp_socket_libevent.cc
|
| diff --git a/net/socket/tcp_socket_libevent.cc b/net/socket/tcp_socket_libevent.cc
|
| index 72ae5809e106c6ba37c1f061d93d96e255c7dfb7..3a63b5a7fc40a1113d70423c8cf4342f80124a75 100644
|
| --- a/net/socket/tcp_socket_libevent.cc
|
| +++ b/net/socket/tcp_socket_libevent.cc
|
| @@ -111,9 +111,8 @@ int MapConnectError(int os_error) {
|
|
|
| //-----------------------------------------------------------------------------
|
|
|
| -TCPSocketLibevent::Watcher::Watcher(
|
| - const base::Closure& read_ready_callback,
|
| - const base::Closure& write_ready_callback)
|
| +TCPSocketLibevent::Watcher::Watcher(const base::Closure& read_ready_callback,
|
| + const base::Closure& write_ready_callback)
|
| : read_ready_callback_(read_ready_callback),
|
| write_ready_callback_(write_ready_callback) {
|
| }
|
| @@ -166,7 +165,8 @@ TCPSocketLibevent::~TCPSocketLibevent() {
|
| net_log_.EndEvent(NetLog::TYPE_SOCKET_ALIVE);
|
| if (tcp_fastopen_connected_) {
|
| UMA_HISTOGRAM_ENUMERATION("Net.TcpFastOpenSocketConnection",
|
| - fast_open_status_, FAST_OPEN_MAX_VALUE);
|
| + fast_open_status_,
|
| + FAST_OPEN_MAX_VALUE);
|
| }
|
| Close();
|
| }
|
| @@ -175,8 +175,8 @@ int TCPSocketLibevent::Open(AddressFamily family) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK_EQ(socket_, kInvalidSocket);
|
|
|
| - socket_ = CreatePlatformSocket(ConvertAddressFamily(family), SOCK_STREAM,
|
| - IPPROTO_TCP);
|
| + socket_ = CreatePlatformSocket(
|
| + ConvertAddressFamily(family), SOCK_STREAM, IPPROTO_TCP);
|
| if (socket_ < 0) {
|
| PLOG(ERROR) << "CreatePlatformSocket() returned an error";
|
| return MapSystemError(errno);
|
| @@ -255,8 +255,11 @@ int TCPSocketLibevent::Accept(scoped_ptr<TCPSocketLibevent>* socket,
|
|
|
| if (result == ERR_IO_PENDING) {
|
| if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
|
| - socket_, true, base::MessageLoopForIO::WATCH_READ,
|
| - &accept_socket_watcher_, &accept_watcher_)) {
|
| + socket_,
|
| + true,
|
| + base::MessageLoopForIO::WATCH_READ,
|
| + &accept_socket_watcher_,
|
| + &accept_watcher_)) {
|
| PLOG(ERROR) << "WatchFileDescriptor failed on read";
|
| return MapSystemError(errno);
|
| }
|
| @@ -361,8 +364,8 @@ int TCPSocketLibevent::Read(IOBuffer* buf,
|
| if (nread >= 0) {
|
| base::StatsCounter read_bytes("tcp.read_bytes");
|
| read_bytes.Add(nread);
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, nread,
|
| - buf->data());
|
| + net_log_.AddByteTransferEvent(
|
| + NetLog::TYPE_SOCKET_BYTES_RECEIVED, nread, buf->data());
|
| RecordFastOpenStatus();
|
| return nread;
|
| }
|
| @@ -374,8 +377,11 @@ int TCPSocketLibevent::Read(IOBuffer* buf,
|
| }
|
|
|
| if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
|
| - socket_, true, base::MessageLoopForIO::WATCH_READ,
|
| - &read_socket_watcher_, &read_watcher_)) {
|
| + socket_,
|
| + true,
|
| + base::MessageLoopForIO::WATCH_READ,
|
| + &read_socket_watcher_,
|
| + &read_watcher_)) {
|
| DVLOG(1) << "WatchFileDescriptor failed on read, errno " << errno;
|
| return MapSystemError(errno);
|
| }
|
| @@ -401,8 +407,8 @@ int TCPSocketLibevent::Write(IOBuffer* buf,
|
| if (nwrite >= 0) {
|
| base::StatsCounter write_bytes("tcp.write_bytes");
|
| write_bytes.Add(nwrite);
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, nwrite,
|
| - buf->data());
|
| + net_log_.AddByteTransferEvent(
|
| + NetLog::TYPE_SOCKET_BYTES_SENT, nwrite, buf->data());
|
| return nwrite;
|
| }
|
| if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
| @@ -413,8 +419,11 @@ int TCPSocketLibevent::Write(IOBuffer* buf,
|
| }
|
|
|
| if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
|
| - socket_, true, base::MessageLoopForIO::WATCH_WRITE,
|
| - &write_socket_watcher_, &write_watcher_)) {
|
| + socket_,
|
| + true,
|
| + base::MessageLoopForIO::WATCH_WRITE,
|
| + &write_socket_watcher_,
|
| + &write_watcher_)) {
|
| DVLOG(1) << "WatchFileDescriptor failed on write, errno " << errno;
|
| return MapSystemError(errno);
|
| }
|
| @@ -459,17 +468,17 @@ void TCPSocketLibevent::SetDefaultOptionsForClient() {
|
| // tcp_socket_win.cc after searching for "NODELAY".
|
| SetTCPNoDelay(socket_, true); // If SetTCPNoDelay fails, we don't care.
|
|
|
| - // TCP keep alive wakes up the radio, which is expensive on mobile. Do not
|
| - // enable it there. It's useful to prevent TCP middleboxes from timing out
|
| - // connection mappings. Packets for timed out connection mappings at
|
| - // middleboxes will either lead to:
|
| - // a) Middleboxes sending TCP RSTs. It's up to higher layers to check for this
|
| - // and retry. The HTTP network transaction code does this.
|
| - // b) Middleboxes just drop the unrecognized TCP packet. This leads to the TCP
|
| - // stack retransmitting packets per TCP stack retransmission timeouts, which
|
| - // are very high (on the order of seconds). Given the number of
|
| - // retransmissions required before killing the connection, this can lead to
|
| - // tens of seconds or even minutes of delay, depending on OS.
|
| +// TCP keep alive wakes up the radio, which is expensive on mobile. Do not
|
| +// enable it there. It's useful to prevent TCP middleboxes from timing out
|
| +// connection mappings. Packets for timed out connection mappings at
|
| +// middleboxes will either lead to:
|
| +// a) Middleboxes sending TCP RSTs. It's up to higher layers to check for this
|
| +// and retry. The HTTP network transaction code does this.
|
| +// b) Middleboxes just drop the unrecognized TCP packet. This leads to the TCP
|
| +// stack retransmitting packets per TCP stack retransmission timeouts, which
|
| +// are very high (on the order of seconds). Given the number of
|
| +// retransmissions required before killing the connection, this can lead to
|
| +// tens of seconds or even minutes of delay, depending on OS.
|
| #if !defined(OS_ANDROID) && !defined(OS_IOS)
|
| const int kTCPKeepAliveSeconds = 45;
|
|
|
| @@ -494,8 +503,8 @@ int TCPSocketLibevent::SetAddressReuse(bool allow) {
|
| //
|
| // SO_REUSEPORT is provided in MacOS X and iOS.
|
| int boolean_value = allow ? 1 : 0;
|
| - int rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &boolean_value,
|
| - sizeof(boolean_value));
|
| + int rv = setsockopt(
|
| + socket_, SOL_SOCKET, SO_REUSEADDR, &boolean_value, sizeof(boolean_value));
|
| if (rv < 0)
|
| return MapSystemError(errno);
|
| return OK;
|
| @@ -503,15 +512,21 @@ int TCPSocketLibevent::SetAddressReuse(bool allow) {
|
|
|
| int TCPSocketLibevent::SetReceiveBufferSize(int32 size) {
|
| DCHECK(CalledOnValidThread());
|
| - int rv = setsockopt(socket_, SOL_SOCKET, SO_RCVBUF,
|
| - reinterpret_cast<const char*>(&size), sizeof(size));
|
| + int rv = setsockopt(socket_,
|
| + SOL_SOCKET,
|
| + SO_RCVBUF,
|
| + reinterpret_cast<const char*>(&size),
|
| + sizeof(size));
|
| return (rv == 0) ? OK : MapSystemError(errno);
|
| }
|
|
|
| int TCPSocketLibevent::SetSendBufferSize(int32 size) {
|
| DCHECK(CalledOnValidThread());
|
| - int rv = setsockopt(socket_, SOL_SOCKET, SO_SNDBUF,
|
| - reinterpret_cast<const char*>(&size), sizeof(size));
|
| + int rv = setsockopt(socket_,
|
| + SOL_SOCKET,
|
| + SO_SNDBUF,
|
| + reinterpret_cast<const char*>(&size),
|
| + sizeof(size));
|
| return (rv == 0) ? OK : MapSystemError(errno);
|
| }
|
|
|
| @@ -592,9 +607,8 @@ void TCPSocketLibevent::EndLoggingMultipleConnectAttempts(int net_error) {
|
| int TCPSocketLibevent::AcceptInternal(scoped_ptr<TCPSocketLibevent>* socket,
|
| IPEndPoint* address) {
|
| SockaddrStorage storage;
|
| - int new_socket = HANDLE_EINTR(accept(socket_,
|
| - storage.addr,
|
| - &storage.addr_len));
|
| + int new_socket =
|
| + HANDLE_EINTR(accept(socket_, storage.addr, &storage.addr_len));
|
| if (new_socket < 0) {
|
| int net_error = MapAcceptError(errno);
|
| if (net_error != ERR_IO_PENDING)
|
| @@ -611,8 +625,8 @@ int TCPSocketLibevent::AcceptInternal(scoped_ptr<TCPSocketLibevent>* socket,
|
| net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, net_error);
|
| return net_error;
|
| }
|
| - scoped_ptr<TCPSocketLibevent> tcp_socket(new TCPSocketLibevent(
|
| - net_log_.net_log(), net_log_.source()));
|
| + scoped_ptr<TCPSocketLibevent> tcp_socket(
|
| + new TCPSocketLibevent(net_log_.net_log(), net_log_.source()));
|
| int adopt_result = tcp_socket->AdoptConnectedSocket(new_socket, ip_end_point);
|
| if (adopt_result != OK) {
|
| net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, adopt_result);
|
| @@ -655,8 +669,11 @@ int TCPSocketLibevent::DoConnect() {
|
| // Otherwise the connect() is going to complete asynchronously, so watch
|
| // for its completion.
|
| if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
|
| - socket_, true, base::MessageLoopForIO::WATCH_WRITE,
|
| - &write_socket_watcher_, &write_watcher_)) {
|
| + socket_,
|
| + true,
|
| + base::MessageLoopForIO::WATCH_WRITE,
|
| + &write_socket_watcher_,
|
| + &write_watcher_)) {
|
| connect_os_error_ = errno;
|
| DVLOG(1) << "WatchFileDescriptor failed: " << connect_os_error_;
|
| return MapSystemError(connect_os_error_);
|
| @@ -706,9 +723,9 @@ void TCPSocketLibevent::LogConnectEnd(int net_error) {
|
| return;
|
| }
|
|
|
| - net_log_.EndEvent(NetLog::TYPE_TCP_CONNECT,
|
| - CreateNetLogSourceAddressCallback(storage.addr,
|
| - storage.addr_len));
|
| + net_log_.EndEvent(
|
| + NetLog::TYPE_TCP_CONNECT,
|
| + CreateNetLogSourceAddressCallback(storage.addr, storage.addr_len));
|
| }
|
|
|
| void TCPSocketLibevent::DidCompleteRead() {
|
| @@ -717,16 +734,16 @@ void TCPSocketLibevent::DidCompleteRead() {
|
| return;
|
|
|
| int bytes_transferred;
|
| - bytes_transferred = HANDLE_EINTR(read(socket_, read_buf_->data(),
|
| - read_buf_len_));
|
| + bytes_transferred =
|
| + HANDLE_EINTR(read(socket_, read_buf_->data(), read_buf_len_));
|
|
|
| int result;
|
| if (bytes_transferred >= 0) {
|
| result = bytes_transferred;
|
| base::StatsCounter read_bytes("tcp.read_bytes");
|
| read_bytes.Add(bytes_transferred);
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, result,
|
| - read_buf_->data());
|
| + net_log_.AddByteTransferEvent(
|
| + NetLog::TYPE_SOCKET_BYTES_RECEIVED, result, read_buf_->data());
|
| } else {
|
| result = MapSystemError(errno);
|
| if (result != ERR_IO_PENDING) {
|
| @@ -749,16 +766,16 @@ void TCPSocketLibevent::DidCompleteWrite() {
|
| return;
|
|
|
| int bytes_transferred;
|
| - bytes_transferred = HANDLE_EINTR(write(socket_, write_buf_->data(),
|
| - write_buf_len_));
|
| + bytes_transferred =
|
| + HANDLE_EINTR(write(socket_, write_buf_->data(), write_buf_len_));
|
|
|
| int result;
|
| if (bytes_transferred >= 0) {
|
| result = bytes_transferred;
|
| base::StatsCounter write_bytes("tcp.write_bytes");
|
| write_bytes.Add(bytes_transferred);
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, result,
|
| - write_buf_->data());
|
| + net_log_.AddByteTransferEvent(
|
| + NetLog::TYPE_SOCKET_BYTES_SENT, result, write_buf_->data());
|
| } else {
|
| result = MapSystemError(errno);
|
| if (result != ERR_IO_PENDING) {
|
| @@ -827,20 +844,16 @@ int TCPSocketLibevent::InternalWrite(IOBuffer* buf, int buf_len) {
|
| return -1;
|
| }
|
|
|
| - int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN.
|
| + int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN.
|
| #if defined(OS_LINUX)
|
| // sendto() will fail with EPIPE when the system doesn't support TCP Fast
|
| // Open. Theoretically that shouldn't happen since the caller should check
|
| // for system support on startup, but users may dynamically disable TCP Fast
|
| // Open via sysctl.
|
| flags |= MSG_NOSIGNAL;
|
| -#endif // defined(OS_LINUX)
|
| - nwrite = HANDLE_EINTR(sendto(socket_,
|
| - buf->data(),
|
| - buf_len,
|
| - flags,
|
| - storage.addr,
|
| - storage.addr_len));
|
| +#endif // defined(OS_LINUX)
|
| + nwrite = HANDLE_EINTR(sendto(
|
| + socket_, buf->data(), buf_len, flags, storage.addr, storage.addr_len));
|
| tcp_fastopen_connected_ = true;
|
|
|
| if (nwrite < 0) {
|
| @@ -880,21 +893,21 @@ void TCPSocketLibevent::RecordFastOpenStatus() {
|
| getsockopt_success =
|
| getsockopt(socket_, IPPROTO_TCP, TCP_INFO, &info, &info_len) == 0 &&
|
| info_len == sizeof(tcp_info);
|
| - server_acked_data = getsockopt_success &&
|
| - (info.tcpi_options & TCPI_OPT_SYN_DATA);
|
| + server_acked_data =
|
| + getsockopt_success && (info.tcpi_options & TCPI_OPT_SYN_DATA);
|
| #endif
|
| if (getsockopt_success) {
|
| if (fast_open_status_ == FAST_OPEN_FAST_CONNECT_RETURN) {
|
| - fast_open_status_ = (server_acked_data ? FAST_OPEN_SYN_DATA_ACK :
|
| - FAST_OPEN_SYN_DATA_NACK);
|
| + fast_open_status_ = (server_acked_data ? FAST_OPEN_SYN_DATA_ACK
|
| + : FAST_OPEN_SYN_DATA_NACK);
|
| } else {
|
| - fast_open_status_ = (server_acked_data ? FAST_OPEN_NO_SYN_DATA_ACK :
|
| - FAST_OPEN_NO_SYN_DATA_NACK);
|
| + fast_open_status_ = (server_acked_data ? FAST_OPEN_NO_SYN_DATA_ACK
|
| + : FAST_OPEN_NO_SYN_DATA_NACK);
|
| }
|
| } else {
|
| - fast_open_status_ = (fast_open_status_ == FAST_OPEN_FAST_CONNECT_RETURN ?
|
| - FAST_OPEN_SYN_DATA_FAILED :
|
| - FAST_OPEN_NO_SYN_DATA_FAILED);
|
| + fast_open_status_ = (fast_open_status_ == FAST_OPEN_FAST_CONNECT_RETURN
|
| + ? FAST_OPEN_SYN_DATA_FAILED
|
| + : FAST_OPEN_NO_SYN_DATA_FAILED);
|
| }
|
| }
|
| }
|
|
|