| Index: net/base/tcp_client_socket_win.cc
|
| ===================================================================
|
| --- net/base/tcp_client_socket_win.cc (revision 14682)
|
| +++ net/base/tcp_client_socket_win.cc (working copy)
|
| @@ -173,6 +173,8 @@
|
|
|
| waiting_read_ = false;
|
| waiting_write_ = false;
|
| + read_iobuffer_ = NULL;
|
| + write_iobuffer_ = NULL;
|
| waiting_connect_ = false;
|
| }
|
|
|
| @@ -207,15 +209,16 @@
|
| return true;
|
| }
|
|
|
| -int TCPClientSocketWin::Read(char* buf,
|
| +int TCPClientSocketWin::Read(IOBuffer* buf,
|
| int buf_len,
|
| CompletionCallback* callback) {
|
| DCHECK_NE(socket_, INVALID_SOCKET);
|
| DCHECK(!waiting_read_);
|
| DCHECK(!read_callback_);
|
| + DCHECK(!read_iobuffer_);
|
|
|
| read_buffer_.len = buf_len;
|
| - read_buffer_.buf = buf;
|
| + read_buffer_.buf = buf->data();
|
|
|
| TRACE_EVENT_BEGIN("socket.read", this, "");
|
| // TODO(wtc): Remove the CHECK after enough testing.
|
| @@ -241,21 +244,23 @@
|
| read_watcher_.StartWatching(read_overlapped_.hEvent, &reader_);
|
| waiting_read_ = true;
|
| read_callback_ = callback;
|
| + read_iobuffer_ = buf;
|
| return ERR_IO_PENDING;
|
| }
|
| return MapWinsockError(err);
|
| }
|
|
|
| -int TCPClientSocketWin::Write(const char* buf,
|
| +int TCPClientSocketWin::Write(IOBuffer* buf,
|
| int buf_len,
|
| CompletionCallback* callback) {
|
| DCHECK_NE(socket_, INVALID_SOCKET);
|
| DCHECK(!waiting_write_);
|
| DCHECK(!write_callback_);
|
| DCHECK_GT(buf_len, 0);
|
| + DCHECK(!write_iobuffer_);
|
|
|
| write_buffer_.len = buf_len;
|
| - write_buffer_.buf = const_cast<char*>(buf);
|
| + write_buffer_.buf = buf->data();
|
|
|
| TRACE_EVENT_BEGIN("socket.write", this, "");
|
| // TODO(wtc): Remove the CHECK after enough testing.
|
| @@ -273,6 +278,7 @@
|
| write_watcher_.StartWatching(write_overlapped_.hEvent, &writer_);
|
| waiting_write_ = true;
|
| write_callback_ = callback;
|
| + write_iobuffer_ = buf;
|
| return ERR_IO_PENDING;
|
| }
|
| return MapWinsockError(err);
|
| @@ -405,6 +411,7 @@
|
| if (tcp_socket_->waiting_connect_) {
|
| tcp_socket_->DidCompleteConnect();
|
| } else {
|
| + DCHECK(tcp_socket_->waiting_read_);
|
| DWORD num_bytes, flags;
|
| BOOL ok = WSAGetOverlappedResult(
|
| tcp_socket_->socket_, &tcp_socket_->read_overlapped_, &num_bytes,
|
| @@ -413,6 +420,7 @@
|
| TRACE_EVENT_END("socket.read", tcp_socket_,
|
| StringPrintf("%d bytes", num_bytes));
|
| tcp_socket_->waiting_read_ = false;
|
| + tcp_socket_->read_iobuffer_ = NULL;
|
| tcp_socket_->DoReadCallback(
|
| ok ? num_bytes : MapWinsockError(WSAGetLastError()));
|
| }
|
| @@ -420,6 +428,7 @@
|
|
|
| void TCPClientSocketWin::WriteDelegate::OnObjectSignaled(HANDLE object) {
|
| DCHECK_EQ(object, tcp_socket_->write_overlapped_.hEvent);
|
| + DCHECK(tcp_socket_->waiting_write_);
|
|
|
| DWORD num_bytes, flags;
|
| BOOL ok = WSAGetOverlappedResult(
|
| @@ -429,6 +438,7 @@
|
| TRACE_EVENT_END("socket.write", tcp_socket_,
|
| StringPrintf("%d bytes", num_bytes));
|
| tcp_socket_->waiting_write_ = false;
|
| + tcp_socket_->write_iobuffer_ = NULL;
|
| tcp_socket_->DoWriteCallback(
|
| ok ? num_bytes : MapWinsockError(WSAGetLastError()));
|
| }
|
|
|