| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_client_socket.h" | 5 #include "net/socket/tcp_client_socket.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <netdb.h> | 9 #include <netdb.h> |
| 10 #include <sys/socket.h> | 10 #include <sys/socket.h> |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 &write_socket_watcher_, &write_watcher_)) { | 567 &write_socket_watcher_, &write_watcher_)) { |
| 568 DVLOG(1) << "WatchFileDescriptor failed on write, errno " << errno; | 568 DVLOG(1) << "WatchFileDescriptor failed on write, errno " << errno; |
| 569 return MapSystemError(errno); | 569 return MapSystemError(errno); |
| 570 } | 570 } |
| 571 | 571 |
| 572 write_buf_ = buf; | 572 write_buf_ = buf; |
| 573 write_buf_len_ = buf_len; | 573 write_buf_len_ = buf_len; |
| 574 old_write_callback_ = callback; | 574 old_write_callback_ = callback; |
| 575 return ERR_IO_PENDING; | 575 return ERR_IO_PENDING; |
| 576 } | 576 } |
| 577 int TCPClientSocketLibevent::Write(IOBuffer* buf, | |
| 578 int buf_len, | |
| 579 const CompletionCallback& callback) { | |
| 580 DCHECK(CalledOnValidThread()); | |
| 581 DCHECK_NE(kInvalidSocket, socket_); | |
| 582 DCHECK(!waiting_connect()); | |
| 583 DCHECK(!old_write_callback_ && write_callback_.is_null()); | |
| 584 // Synchronous operation not supported | |
| 585 DCHECK(!callback.is_null()); | |
| 586 DCHECK_GT(buf_len, 0); | |
| 587 | |
| 588 int nwrite = InternalWrite(buf, buf_len); | |
| 589 if (nwrite >= 0) { | |
| 590 base::StatsCounter write_bytes("tcp.write_bytes"); | |
| 591 write_bytes.Add(nwrite); | |
| 592 if (nwrite > 0) | |
| 593 use_history_.set_was_used_to_convey_data(); | |
| 594 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, nwrite, | |
| 595 buf->data()); | |
| 596 return nwrite; | |
| 597 } | |
| 598 if (errno != EAGAIN && errno != EWOULDBLOCK) | |
| 599 return MapSystemError(errno); | |
| 600 | |
| 601 if (!MessageLoopForIO::current()->WatchFileDescriptor( | |
| 602 socket_, true, MessageLoopForIO::WATCH_WRITE, | |
| 603 &write_socket_watcher_, &write_watcher_)) { | |
| 604 DVLOG(1) << "WatchFileDescriptor failed on write, errno " << errno; | |
| 605 return MapSystemError(errno); | |
| 606 } | |
| 607 | |
| 608 write_buf_ = buf; | |
| 609 write_buf_len_ = buf_len; | |
| 610 write_callback_ = callback; | |
| 611 return ERR_IO_PENDING; | |
| 612 } | |
| 613 | 577 |
| 614 int TCPClientSocketLibevent::InternalWrite(IOBuffer* buf, int buf_len) { | 578 int TCPClientSocketLibevent::InternalWrite(IOBuffer* buf, int buf_len) { |
| 615 int nwrite; | 579 int nwrite; |
| 616 if (use_tcp_fastopen_ && !tcp_fastopen_connected_) { | 580 if (use_tcp_fastopen_ && !tcp_fastopen_connected_) { |
| 617 // We have a limited amount of data to send in the SYN packet. | 581 // We have a limited amount of data to send in the SYN packet. |
| 618 int kMaxFastOpenSendLength = 1420; | 582 int kMaxFastOpenSendLength = 1420; |
| 619 | 583 |
| 620 buf_len = std::min(kMaxFastOpenSendLength, buf_len); | 584 buf_len = std::min(kMaxFastOpenSendLength, buf_len); |
| 621 | 585 |
| 622 int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN | 586 int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 | 812 |
| 849 int64 TCPClientSocketLibevent::NumBytesRead() const { | 813 int64 TCPClientSocketLibevent::NumBytesRead() const { |
| 850 return num_bytes_read_; | 814 return num_bytes_read_; |
| 851 } | 815 } |
| 852 | 816 |
| 853 base::TimeDelta TCPClientSocketLibevent::GetConnectTimeMicros() const { | 817 base::TimeDelta TCPClientSocketLibevent::GetConnectTimeMicros() const { |
| 854 return connect_time_micros_; | 818 return connect_time_micros_; |
| 855 } | 819 } |
| 856 | 820 |
| 857 } // namespace net | 821 } // namespace net |
| OLD | NEW |