Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: net/base/tcp_client_socket_libevent.cc

Issue 87073: Extend the use of IOBuffers to the code underneath... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/tcp_client_socket_libevent.h ('k') | net/base/tcp_client_socket_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/base/tcp_client_socket_libevent.h" 5 #include "net/base/tcp_client_socket_libevent.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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 char c; 165 char c;
166 int rv = recv(socket_, &c, 1, MSG_PEEK); 166 int rv = recv(socket_, &c, 1, MSG_PEEK);
167 if (rv >= 0) 167 if (rv >= 0)
168 return false; 168 return false;
169 if (errno != EAGAIN && errno != EWOULDBLOCK) 169 if (errno != EAGAIN && errno != EWOULDBLOCK)
170 return false; 170 return false;
171 171
172 return true; 172 return true;
173 } 173 }
174 174
175 int TCPClientSocketLibevent::Read(char* buf, 175 int TCPClientSocketLibevent::Read(IOBuffer* buf,
176 int buf_len, 176 int buf_len,
177 CompletionCallback* callback) { 177 CompletionCallback* callback) {
178 DCHECK_NE(kInvalidSocket, socket_); 178 DCHECK_NE(kInvalidSocket, socket_);
179 DCHECK(!waiting_connect_); 179 DCHECK(!waiting_connect_);
180 DCHECK(!read_callback_); 180 DCHECK(!read_callback_);
181 // Synchronous operation not supported 181 // Synchronous operation not supported
182 DCHECK(callback); 182 DCHECK(callback);
183 DCHECK_GT(buf_len, 0); 183 DCHECK_GT(buf_len, 0);
184 184
185 TRACE_EVENT_BEGIN("socket.read", this, ""); 185 TRACE_EVENT_BEGIN("socket.read", this, "");
186 int nread = read(socket_, buf, buf_len); 186 int nread = read(socket_, buf->data(), buf_len);
187 if (nread >= 0) { 187 if (nread >= 0) {
188 TRACE_EVENT_END("socket.read", this, StringPrintf("%d bytes", nread)); 188 TRACE_EVENT_END("socket.read", this, StringPrintf("%d bytes", nread));
189 return nread; 189 return nread;
190 } 190 }
191 if (errno != EAGAIN && errno != EWOULDBLOCK) { 191 if (errno != EAGAIN && errno != EWOULDBLOCK) {
192 DLOG(INFO) << "read failed, errno " << errno; 192 DLOG(INFO) << "read failed, errno " << errno;
193 return MapPosixError(errno); 193 return MapPosixError(errno);
194 } 194 }
195 195
196 if (!MessageLoopForIO::current()->WatchFileDescriptor( 196 if (!MessageLoopForIO::current()->WatchFileDescriptor(
197 socket_, true, MessageLoopForIO::WATCH_READ, 197 socket_, true, MessageLoopForIO::WATCH_READ,
198 &socket_watcher_, this)) { 198 &socket_watcher_, this)) {
199 DLOG(INFO) << "WatchFileDescriptor failed on read, errno " << errno; 199 DLOG(INFO) << "WatchFileDescriptor failed on read, errno " << errno;
200 return MapPosixError(errno); 200 return MapPosixError(errno);
201 } 201 }
202 202
203 read_buf_ = buf; 203 read_buf_ = buf;
204 read_buf_len_ = buf_len; 204 read_buf_len_ = buf_len;
205 read_callback_ = callback; 205 read_callback_ = callback;
206 return ERR_IO_PENDING; 206 return ERR_IO_PENDING;
207 } 207 }
208 208
209 int TCPClientSocketLibevent::Write(const char* buf, 209 int TCPClientSocketLibevent::Write(IOBuffer* buf,
210 int buf_len, 210 int buf_len,
211 CompletionCallback* callback) { 211 CompletionCallback* callback) {
212 DCHECK_NE(kInvalidSocket, socket_); 212 DCHECK_NE(kInvalidSocket, socket_);
213 DCHECK(!waiting_connect_); 213 DCHECK(!waiting_connect_);
214 DCHECK(!write_callback_); 214 DCHECK(!write_callback_);
215 // Synchronous operation not supported 215 // Synchronous operation not supported
216 DCHECK(callback); 216 DCHECK(callback);
217 DCHECK_GT(buf_len, 0); 217 DCHECK_GT(buf_len, 0);
218 218
219 TRACE_EVENT_BEGIN("socket.write", this, ""); 219 TRACE_EVENT_BEGIN("socket.write", this, "");
220 int nwrite = write(socket_, buf, buf_len); 220 int nwrite = write(socket_, buf->data(), buf_len);
221 if (nwrite >= 0) { 221 if (nwrite >= 0) {
222 TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", nwrite)); 222 TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", nwrite));
223 return nwrite; 223 return nwrite;
224 } 224 }
225 if (errno != EAGAIN && errno != EWOULDBLOCK) 225 if (errno != EAGAIN && errno != EWOULDBLOCK)
226 return MapPosixError(errno); 226 return MapPosixError(errno);
227 227
228 if (!MessageLoopForIO::current()->WatchFileDescriptor( 228 if (!MessageLoopForIO::current()->WatchFileDescriptor(
229 socket_, true, MessageLoopForIO::WATCH_WRITE, 229 socket_, true, MessageLoopForIO::WATCH_WRITE,
230 &socket_watcher_, this)) { 230 &socket_watcher_, this)) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 waiting_connect_ = false; 302 waiting_connect_ = false;
303 } 303 }
304 304
305 if (result != ERR_IO_PENDING) { 305 if (result != ERR_IO_PENDING) {
306 DoReadCallback(result); 306 DoReadCallback(result);
307 } 307 }
308 } 308 }
309 309
310 void TCPClientSocketLibevent::DidCompleteRead() { 310 void TCPClientSocketLibevent::DidCompleteRead() {
311 int bytes_transferred; 311 int bytes_transferred;
312 bytes_transferred = read(socket_, read_buf_, read_buf_len_); 312 bytes_transferred = read(socket_, read_buf_->data(), read_buf_len_);
313 313
314 int result; 314 int result;
315 if (bytes_transferred >= 0) { 315 if (bytes_transferred >= 0) {
316 TRACE_EVENT_END("socket.read", this, 316 TRACE_EVENT_END("socket.read", this,
317 StringPrintf("%d bytes", bytes_transferred)); 317 StringPrintf("%d bytes", bytes_transferred));
318 result = bytes_transferred; 318 result = bytes_transferred;
319 } else { 319 } else {
320 result = MapPosixError(errno); 320 result = MapPosixError(errno);
321 } 321 }
322 322
323 if (result != ERR_IO_PENDING) { 323 if (result != ERR_IO_PENDING) {
324 read_buf_ = NULL; 324 read_buf_ = NULL;
325 read_buf_len_ = 0; 325 read_buf_len_ = 0;
326 socket_watcher_.StopWatchingFileDescriptor(); 326 socket_watcher_.StopWatchingFileDescriptor();
327 DoReadCallback(result); 327 DoReadCallback(result);
328 } 328 }
329 } 329 }
330 330
331 void TCPClientSocketLibevent::DidCompleteWrite() { 331 void TCPClientSocketLibevent::DidCompleteWrite() {
332 int bytes_transferred; 332 int bytes_transferred;
333 bytes_transferred = write(socket_, write_buf_, write_buf_len_); 333 bytes_transferred = write(socket_, write_buf_->data(), write_buf_len_);
334 334
335 int result; 335 int result;
336 if (bytes_transferred >= 0) { 336 if (bytes_transferred >= 0) {
337 result = bytes_transferred; 337 result = bytes_transferred;
338 TRACE_EVENT_END("socket.write", this, 338 TRACE_EVENT_END("socket.write", this,
339 StringPrintf("%d bytes", bytes_transferred)); 339 StringPrintf("%d bytes", bytes_transferred));
340 } else { 340 } else {
341 result = MapPosixError(errno); 341 result = MapPosixError(errno);
342 } 342 }
343 343
(...skipping 20 matching lines...) Expand all
364 DidCompleteWrite(); 364 DidCompleteWrite();
365 } 365 }
366 } 366 }
367 367
368 int TCPClientSocketLibevent::GetPeerName(struct sockaddr *name, 368 int TCPClientSocketLibevent::GetPeerName(struct sockaddr *name,
369 socklen_t *namelen) { 369 socklen_t *namelen) {
370 return ::getpeername(socket_, name, namelen); 370 return ::getpeername(socket_, name, namelen);
371 } 371 }
372 372
373 } // namespace net 373 } // namespace net
OLDNEW
« no previous file with comments | « net/base/tcp_client_socket_libevent.h ('k') | net/base/tcp_client_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698