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

Side by Side Diff: net/socket/tcp_socket_win.cc

Issue 2905183002: Remove deprecated NonThreadSafe usage in net\socket. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « net/socket/tcp_socket_win.h ('k') | net/socket/udp_socket_posix.h » ('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 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.h" 5 #include "net/socket/tcp_socket.h"
6 #include "net/socket/tcp_socket_win.h" 6 #include "net/socket/tcp_socket_win.h"
7 7
8 #include <errno.h> 8 #include <errno.h>
9 #include <mstcpip.h> 9 #include <mstcpip.h>
10 10
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 waiting_write_(false), 252 waiting_write_(false),
253 connect_os_error_(0), 253 connect_os_error_(0),
254 logging_multiple_connect_attempts_(false), 254 logging_multiple_connect_attempts_(false),
255 net_log_(NetLogWithSource::Make(net_log, NetLogSourceType::SOCKET)) { 255 net_log_(NetLogWithSource::Make(net_log, NetLogSourceType::SOCKET)) {
256 net_log_.BeginEvent(NetLogEventType::SOCKET_ALIVE, 256 net_log_.BeginEvent(NetLogEventType::SOCKET_ALIVE,
257 source.ToEventParametersCallback()); 257 source.ToEventParametersCallback());
258 EnsureWinsockInit(); 258 EnsureWinsockInit();
259 } 259 }
260 260
261 TCPSocketWin::~TCPSocketWin() { 261 TCPSocketWin::~TCPSocketWin() {
262 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
262 Close(); 263 Close();
263 net_log_.EndEvent(NetLogEventType::SOCKET_ALIVE); 264 net_log_.EndEvent(NetLogEventType::SOCKET_ALIVE);
264 } 265 }
265 266
266 int TCPSocketWin::Open(AddressFamily family) { 267 int TCPSocketWin::Open(AddressFamily family) {
267 DCHECK(CalledOnValidThread()); 268 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
268 DCHECK_EQ(socket_, INVALID_SOCKET); 269 DCHECK_EQ(socket_, INVALID_SOCKET);
269 270
270 socket_ = CreatePlatformSocket(ConvertAddressFamily(family), SOCK_STREAM, 271 socket_ = CreatePlatformSocket(ConvertAddressFamily(family), SOCK_STREAM,
271 IPPROTO_TCP); 272 IPPROTO_TCP);
272 int os_error = WSAGetLastError(); 273 int os_error = WSAGetLastError();
273 if (socket_ == INVALID_SOCKET) { 274 if (socket_ == INVALID_SOCKET) {
274 PLOG(ERROR) << "CreatePlatformSocket() returned an error"; 275 PLOG(ERROR) << "CreatePlatformSocket() returned an error";
275 return MapSystemError(os_error); 276 return MapSystemError(os_error);
276 } 277 }
277 278
278 if (!SetNonBlockingAndGetError(socket_, &os_error)) { 279 if (!SetNonBlockingAndGetError(socket_, &os_error)) {
279 int result = MapSystemError(os_error); 280 int result = MapSystemError(os_error);
280 Close(); 281 Close();
281 return result; 282 return result;
282 } 283 }
283 284
284 return OK; 285 return OK;
285 } 286 }
286 287
287 int TCPSocketWin::AdoptConnectedSocket(SocketDescriptor socket, 288 int TCPSocketWin::AdoptConnectedSocket(SocketDescriptor socket,
288 const IPEndPoint& peer_address) { 289 const IPEndPoint& peer_address) {
289 DCHECK(CalledOnValidThread()); 290 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
290 DCHECK_EQ(socket_, INVALID_SOCKET); 291 DCHECK_EQ(socket_, INVALID_SOCKET);
291 DCHECK(!core_.get()); 292 DCHECK(!core_.get());
292 293
293 socket_ = socket; 294 socket_ = socket;
294 295
295 int os_error; 296 int os_error;
296 if (!SetNonBlockingAndGetError(socket_, &os_error)) { 297 if (!SetNonBlockingAndGetError(socket_, &os_error)) {
297 int result = MapSystemError(os_error); 298 int result = MapSystemError(os_error);
298 Close(); 299 Close();
299 return result; 300 return result;
300 } 301 }
301 302
302 core_ = new Core(this); 303 core_ = new Core(this);
303 peer_address_.reset(new IPEndPoint(peer_address)); 304 peer_address_.reset(new IPEndPoint(peer_address));
304 305
305 return OK; 306 return OK;
306 } 307 }
307 308
308 int TCPSocketWin::AdoptUnconnectedSocket(SocketDescriptor socket) { 309 int TCPSocketWin::AdoptUnconnectedSocket(SocketDescriptor socket) {
309 DCHECK(CalledOnValidThread()); 310 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
310 DCHECK_EQ(socket_, INVALID_SOCKET); 311 DCHECK_EQ(socket_, INVALID_SOCKET);
311 312
312 socket_ = socket; 313 socket_ = socket;
313 314
314 int os_error; 315 int os_error;
315 if (!SetNonBlockingAndGetError(socket_, &os_error)) { 316 if (!SetNonBlockingAndGetError(socket_, &os_error)) {
316 int result = MapSystemError(os_error); 317 int result = MapSystemError(os_error);
317 Close(); 318 Close();
318 return result; 319 return result;
319 } 320 }
320 321
321 // |core_| is not needed for sockets that are used to accept connections. 322 // |core_| is not needed for sockets that are used to accept connections.
322 // The operation here is more like Open but with an existing socket. 323 // The operation here is more like Open but with an existing socket.
323 324
324 return OK; 325 return OK;
325 } 326 }
326 327
327 int TCPSocketWin::Bind(const IPEndPoint& address) { 328 int TCPSocketWin::Bind(const IPEndPoint& address) {
328 DCHECK(CalledOnValidThread()); 329 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
329 DCHECK_NE(socket_, INVALID_SOCKET); 330 DCHECK_NE(socket_, INVALID_SOCKET);
330 331
331 SockaddrStorage storage; 332 SockaddrStorage storage;
332 if (!address.ToSockAddr(storage.addr, &storage.addr_len)) 333 if (!address.ToSockAddr(storage.addr, &storage.addr_len))
333 return ERR_ADDRESS_INVALID; 334 return ERR_ADDRESS_INVALID;
334 335
335 int result = bind(socket_, storage.addr, storage.addr_len); 336 int result = bind(socket_, storage.addr, storage.addr_len);
336 int os_error = WSAGetLastError(); 337 int os_error = WSAGetLastError();
337 if (result < 0) { 338 if (result < 0) {
338 PLOG(ERROR) << "bind() returned an error"; 339 PLOG(ERROR) << "bind() returned an error";
339 return MapSystemError(os_error); 340 return MapSystemError(os_error);
340 } 341 }
341 342
342 return OK; 343 return OK;
343 } 344 }
344 345
345 int TCPSocketWin::Listen(int backlog) { 346 int TCPSocketWin::Listen(int backlog) {
346 DCHECK(CalledOnValidThread()); 347 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
347 DCHECK_GT(backlog, 0); 348 DCHECK_GT(backlog, 0);
348 DCHECK_NE(socket_, INVALID_SOCKET); 349 DCHECK_NE(socket_, INVALID_SOCKET);
349 DCHECK_EQ(accept_event_, WSA_INVALID_EVENT); 350 DCHECK_EQ(accept_event_, WSA_INVALID_EVENT);
350 351
351 accept_event_ = WSACreateEvent(); 352 accept_event_ = WSACreateEvent();
352 int os_error = WSAGetLastError(); 353 int os_error = WSAGetLastError();
353 if (accept_event_ == WSA_INVALID_EVENT) { 354 if (accept_event_ == WSA_INVALID_EVENT) {
354 PLOG(ERROR) << "WSACreateEvent()"; 355 PLOG(ERROR) << "WSACreateEvent()";
355 return MapSystemError(os_error); 356 return MapSystemError(os_error);
356 } 357 }
357 358
358 int result = listen(socket_, backlog); 359 int result = listen(socket_, backlog);
359 os_error = WSAGetLastError(); 360 os_error = WSAGetLastError();
360 if (result < 0) { 361 if (result < 0) {
361 PLOG(ERROR) << "listen() returned an error"; 362 PLOG(ERROR) << "listen() returned an error";
362 return MapSystemError(os_error); 363 return MapSystemError(os_error);
363 } 364 }
364 365
365 return OK; 366 return OK;
366 } 367 }
367 368
368 int TCPSocketWin::Accept(std::unique_ptr<TCPSocketWin>* socket, 369 int TCPSocketWin::Accept(std::unique_ptr<TCPSocketWin>* socket,
369 IPEndPoint* address, 370 IPEndPoint* address,
370 const CompletionCallback& callback) { 371 const CompletionCallback& callback) {
371 DCHECK(CalledOnValidThread()); 372 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
372 DCHECK(socket); 373 DCHECK(socket);
373 DCHECK(address); 374 DCHECK(address);
374 DCHECK(!callback.is_null()); 375 DCHECK(!callback.is_null());
375 DCHECK(accept_callback_.is_null()); 376 DCHECK(accept_callback_.is_null());
376 377
377 net_log_.BeginEvent(NetLogEventType::TCP_ACCEPT); 378 net_log_.BeginEvent(NetLogEventType::TCP_ACCEPT);
378 379
379 int result = AcceptInternal(socket, address); 380 int result = AcceptInternal(socket, address);
380 381
381 if (result == ERR_IO_PENDING) { 382 if (result == ERR_IO_PENDING) {
382 // Start watching. 383 // Start watching.
383 WSAEventSelect(socket_, accept_event_, FD_ACCEPT); 384 WSAEventSelect(socket_, accept_event_, FD_ACCEPT);
384 accept_watcher_.StartWatchingOnce(accept_event_, this); 385 accept_watcher_.StartWatchingOnce(accept_event_, this);
385 386
386 accept_socket_ = socket; 387 accept_socket_ = socket;
387 accept_address_ = address; 388 accept_address_ = address;
388 accept_callback_ = callback; 389 accept_callback_ = callback;
389 } 390 }
390 391
391 return result; 392 return result;
392 } 393 }
393 394
394 int TCPSocketWin::Connect(const IPEndPoint& address, 395 int TCPSocketWin::Connect(const IPEndPoint& address,
395 const CompletionCallback& callback) { 396 const CompletionCallback& callback) {
396 DCHECK(CalledOnValidThread()); 397 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
397 DCHECK_NE(socket_, INVALID_SOCKET); 398 DCHECK_NE(socket_, INVALID_SOCKET);
398 DCHECK(!waiting_connect_); 399 DCHECK(!waiting_connect_);
399 400
400 // |peer_address_| and |core_| will be non-NULL if Connect() has been called. 401 // |peer_address_| and |core_| will be non-NULL if Connect() has been called.
401 // Unless Close() is called to reset the internal state, a second call to 402 // Unless Close() is called to reset the internal state, a second call to
402 // Connect() is not allowed. 403 // Connect() is not allowed.
403 // Please note that we enforce this even if the previous Connect() has 404 // Please note that we enforce this even if the previous Connect() has
404 // completed and failed. Although it is allowed to connect the same |socket_| 405 // completed and failed. Although it is allowed to connect the same |socket_|
405 // again after a connection attempt failed on Windows, it results in 406 // again after a connection attempt failed on Windows, it results in
406 // unspecified behavior according to POSIX. Therefore, we make it behave in 407 // unspecified behavior according to POSIX. Therefore, we make it behave in
(...skipping 12 matching lines...) Expand all
419 read_callback_ = callback; 420 read_callback_ = callback;
420 waiting_connect_ = true; 421 waiting_connect_ = true;
421 } else { 422 } else {
422 DoConnectComplete(rv); 423 DoConnectComplete(rv);
423 } 424 }
424 425
425 return rv; 426 return rv;
426 } 427 }
427 428
428 bool TCPSocketWin::IsConnected() const { 429 bool TCPSocketWin::IsConnected() const {
429 DCHECK(CalledOnValidThread()); 430 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
430 431
431 if (socket_ == INVALID_SOCKET || waiting_connect_) 432 if (socket_ == INVALID_SOCKET || waiting_connect_)
432 return false; 433 return false;
433 434
434 if (waiting_read_) 435 if (waiting_read_)
435 return true; 436 return true;
436 437
437 // Check if connection is alive. 438 // Check if connection is alive.
438 char c; 439 char c;
439 int rv = recv(socket_, &c, 1, MSG_PEEK); 440 int rv = recv(socket_, &c, 1, MSG_PEEK);
440 int os_error = WSAGetLastError(); 441 int os_error = WSAGetLastError();
441 if (rv == 0) 442 if (rv == 0)
442 return false; 443 return false;
443 if (rv == SOCKET_ERROR && os_error != WSAEWOULDBLOCK) 444 if (rv == SOCKET_ERROR && os_error != WSAEWOULDBLOCK)
444 return false; 445 return false;
445 446
446 return true; 447 return true;
447 } 448 }
448 449
449 bool TCPSocketWin::IsConnectedAndIdle() const { 450 bool TCPSocketWin::IsConnectedAndIdle() const {
450 DCHECK(CalledOnValidThread()); 451 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
451 452
452 if (socket_ == INVALID_SOCKET || waiting_connect_) 453 if (socket_ == INVALID_SOCKET || waiting_connect_)
453 return false; 454 return false;
454 455
455 if (waiting_read_) 456 if (waiting_read_)
456 return true; 457 return true;
457 458
458 // Check if connection is alive and we haven't received any data 459 // Check if connection is alive and we haven't received any data
459 // unexpectedly. 460 // unexpectedly.
460 char c; 461 char c;
461 int rv = recv(socket_, &c, 1, MSG_PEEK); 462 int rv = recv(socket_, &c, 1, MSG_PEEK);
462 int os_error = WSAGetLastError(); 463 int os_error = WSAGetLastError();
463 if (rv >= 0) 464 if (rv >= 0)
464 return false; 465 return false;
465 if (os_error != WSAEWOULDBLOCK) 466 if (os_error != WSAEWOULDBLOCK)
466 return false; 467 return false;
467 468
468 return true; 469 return true;
469 } 470 }
470 471
471 int TCPSocketWin::Read(IOBuffer* buf, 472 int TCPSocketWin::Read(IOBuffer* buf,
472 int buf_len, 473 int buf_len,
473 const CompletionCallback& callback) { 474 const CompletionCallback& callback) {
474 DCHECK(CalledOnValidThread()); 475 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
475 DCHECK(!core_->read_iobuffer_.get()); 476 DCHECK(!core_->read_iobuffer_.get());
476 // base::Unretained() is safe because RetryRead() won't be called when |this| 477 // base::Unretained() is safe because RetryRead() won't be called when |this|
477 // is gone. 478 // is gone.
478 int rv = 479 int rv =
479 ReadIfReady(buf, buf_len, 480 ReadIfReady(buf, buf_len,
480 base::Bind(&TCPSocketWin::RetryRead, base::Unretained(this))); 481 base::Bind(&TCPSocketWin::RetryRead, base::Unretained(this)));
481 if (rv != ERR_IO_PENDING) 482 if (rv != ERR_IO_PENDING)
482 return rv; 483 return rv;
483 read_callback_ = callback; 484 read_callback_ = callback;
484 core_->read_iobuffer_ = buf; 485 core_->read_iobuffer_ = buf;
485 core_->read_buffer_length_ = buf_len; 486 core_->read_buffer_length_ = buf_len;
486 return ERR_IO_PENDING; 487 return ERR_IO_PENDING;
487 } 488 }
488 489
489 int TCPSocketWin::ReadIfReady(IOBuffer* buf, 490 int TCPSocketWin::ReadIfReady(IOBuffer* buf,
490 int buf_len, 491 int buf_len,
491 const CompletionCallback& callback) { 492 const CompletionCallback& callback) {
492 DCHECK(CalledOnValidThread()); 493 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
493 DCHECK_NE(socket_, INVALID_SOCKET); 494 DCHECK_NE(socket_, INVALID_SOCKET);
494 DCHECK(!waiting_read_); 495 DCHECK(!waiting_read_);
495 DCHECK(read_if_ready_callback_.is_null()); 496 DCHECK(read_if_ready_callback_.is_null());
496 497
497 if (!core_->non_blocking_reads_initialized_) { 498 if (!core_->non_blocking_reads_initialized_) {
498 WSAEventSelect(socket_, core_->read_overlapped_.hEvent, FD_READ | FD_CLOSE); 499 WSAEventSelect(socket_, core_->read_overlapped_.hEvent, FD_READ | FD_CLOSE);
499 core_->non_blocking_reads_initialized_ = true; 500 core_->non_blocking_reads_initialized_ = true;
500 } 501 }
501 int rv = recv(socket_, buf->data(), buf_len, 0); 502 int rv = recv(socket_, buf->data(), buf_len, 0);
502 int os_error = WSAGetLastError(); 503 int os_error = WSAGetLastError();
(...skipping 13 matching lines...) Expand all
516 517
517 waiting_read_ = true; 518 waiting_read_ = true;
518 read_if_ready_callback_ = callback; 519 read_if_ready_callback_ = callback;
519 core_->WatchForRead(); 520 core_->WatchForRead();
520 return ERR_IO_PENDING; 521 return ERR_IO_PENDING;
521 } 522 }
522 523
523 int TCPSocketWin::Write(IOBuffer* buf, 524 int TCPSocketWin::Write(IOBuffer* buf,
524 int buf_len, 525 int buf_len,
525 const CompletionCallback& callback) { 526 const CompletionCallback& callback) {
526 DCHECK(CalledOnValidThread()); 527 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
527 DCHECK_NE(socket_, INVALID_SOCKET); 528 DCHECK_NE(socket_, INVALID_SOCKET);
528 DCHECK(!waiting_write_); 529 DCHECK(!waiting_write_);
529 CHECK(write_callback_.is_null()); 530 CHECK(write_callback_.is_null());
530 DCHECK_GT(buf_len, 0); 531 DCHECK_GT(buf_len, 0);
531 DCHECK(!core_->write_iobuffer_.get()); 532 DCHECK(!core_->write_iobuffer_.get());
532 533
533 WSABUF write_buffer; 534 WSABUF write_buffer;
534 write_buffer.len = buf_len; 535 write_buffer.len = buf_len;
535 write_buffer.buf = buf->data(); 536 write_buffer.buf = buf->data();
536 537
(...skipping 28 matching lines...) Expand all
565 } 566 }
566 waiting_write_ = true; 567 waiting_write_ = true;
567 write_callback_ = callback; 568 write_callback_ = callback;
568 core_->write_iobuffer_ = buf; 569 core_->write_iobuffer_ = buf;
569 core_->write_buffer_length_ = buf_len; 570 core_->write_buffer_length_ = buf_len;
570 core_->WatchForWrite(); 571 core_->WatchForWrite();
571 return ERR_IO_PENDING; 572 return ERR_IO_PENDING;
572 } 573 }
573 574
574 int TCPSocketWin::GetLocalAddress(IPEndPoint* address) const { 575 int TCPSocketWin::GetLocalAddress(IPEndPoint* address) const {
575 DCHECK(CalledOnValidThread()); 576 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
576 DCHECK(address); 577 DCHECK(address);
577 578
578 SockaddrStorage storage; 579 SockaddrStorage storage;
579 if (getsockname(socket_, storage.addr, &storage.addr_len)) { 580 if (getsockname(socket_, storage.addr, &storage.addr_len)) {
580 int os_error = WSAGetLastError(); 581 int os_error = WSAGetLastError();
581 return MapSystemError(os_error); 582 return MapSystemError(os_error);
582 } 583 }
583 if (!address->FromSockAddr(storage.addr, storage.addr_len)) 584 if (!address->FromSockAddr(storage.addr, storage.addr_len))
584 return ERR_ADDRESS_INVALID; 585 return ERR_ADDRESS_INVALID;
585 586
586 return OK; 587 return OK;
587 } 588 }
588 589
589 int TCPSocketWin::GetPeerAddress(IPEndPoint* address) const { 590 int TCPSocketWin::GetPeerAddress(IPEndPoint* address) const {
590 DCHECK(CalledOnValidThread()); 591 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
591 DCHECK(address); 592 DCHECK(address);
592 if (!IsConnected()) 593 if (!IsConnected())
593 return ERR_SOCKET_NOT_CONNECTED; 594 return ERR_SOCKET_NOT_CONNECTED;
594 *address = *peer_address_; 595 *address = *peer_address_;
595 return OK; 596 return OK;
596 } 597 }
597 598
598 int TCPSocketWin::SetDefaultOptionsForServer() { 599 int TCPSocketWin::SetDefaultOptionsForServer() {
599 return SetExclusiveAddrUse(); 600 return SetExclusiveAddrUse();
600 } 601 }
(...skipping 23 matching lines...) Expand all
624 BOOL true_value = 1; 625 BOOL true_value = 1;
625 int rv = setsockopt(socket_, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, 626 int rv = setsockopt(socket_, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
626 reinterpret_cast<const char*>(&true_value), 627 reinterpret_cast<const char*>(&true_value),
627 sizeof(true_value)); 628 sizeof(true_value));
628 if (rv < 0) 629 if (rv < 0)
629 return MapSystemError(errno); 630 return MapSystemError(errno);
630 return OK; 631 return OK;
631 } 632 }
632 633
633 int TCPSocketWin::SetReceiveBufferSize(int32_t size) { 634 int TCPSocketWin::SetReceiveBufferSize(int32_t size) {
634 DCHECK(CalledOnValidThread()); 635 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
635 return SetSocketReceiveBufferSize(socket_, size); 636 return SetSocketReceiveBufferSize(socket_, size);
636 } 637 }
637 638
638 int TCPSocketWin::SetSendBufferSize(int32_t size) { 639 int TCPSocketWin::SetSendBufferSize(int32_t size) {
639 DCHECK(CalledOnValidThread()); 640 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
640 return SetSocketSendBufferSize(socket_, size); 641 return SetSocketSendBufferSize(socket_, size);
641 } 642 }
642 643
643 bool TCPSocketWin::SetKeepAlive(bool enable, int delay) { 644 bool TCPSocketWin::SetKeepAlive(bool enable, int delay) {
644 return SetTCPKeepAlive(socket_, enable, delay); 645 return SetTCPKeepAlive(socket_, enable, delay);
645 } 646 }
646 647
647 bool TCPSocketWin::SetNoDelay(bool no_delay) { 648 bool TCPSocketWin::SetNoDelay(bool no_delay) {
648 return SetTCPNoDelay(socket_, no_delay) == OK; 649 return SetTCPNoDelay(socket_, no_delay) == OK;
649 } 650 }
650 651
651 void TCPSocketWin::Close() { 652 void TCPSocketWin::Close() {
652 DCHECK(CalledOnValidThread()); 653 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
653 654
654 if (socket_ != INVALID_SOCKET) { 655 if (socket_ != INVALID_SOCKET) {
655 // Only log the close event if there's actually a socket to close. 656 // Only log the close event if there's actually a socket to close.
656 net_log_.AddEvent(NetLogEventType::SOCKET_CLOSED); 657 net_log_.AddEvent(NetLogEventType::SOCKET_CLOSED);
657 658
658 // Note: don't use CancelIo to cancel pending IO because it doesn't work 659 // Note: don't use CancelIo to cancel pending IO because it doesn't work
659 // when there is a Winsock layered service provider. 660 // when there is a Winsock layered service provider.
660 661
661 // In most socket implementations, closing a socket results in a graceful 662 // In most socket implementations, closing a socket results in a graceful
662 // connection shutdown, but in Winsock we have to call shutdown explicitly. 663 // connection shutdown, but in Winsock we have to call shutdown explicitly.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 waiting_write_ = false; 701 waiting_write_ = false;
701 702
702 read_callback_.Reset(); 703 read_callback_.Reset();
703 read_if_ready_callback_.Reset(); 704 read_if_ready_callback_.Reset();
704 write_callback_.Reset(); 705 write_callback_.Reset();
705 peer_address_.reset(); 706 peer_address_.reset();
706 connect_os_error_ = 0; 707 connect_os_error_ = 0;
707 } 708 }
708 709
709 void TCPSocketWin::DetachFromThread() { 710 void TCPSocketWin::DetachFromThread() {
710 base::NonThreadSafe::DetachFromThread(); 711 DETACH_FROM_THREAD(thread_checker_);
711 } 712 }
712 713
713 void TCPSocketWin::StartLoggingMultipleConnectAttempts( 714 void TCPSocketWin::StartLoggingMultipleConnectAttempts(
714 const AddressList& addresses) { 715 const AddressList& addresses) {
715 if (!logging_multiple_connect_attempts_) { 716 if (!logging_multiple_connect_attempts_) {
716 logging_multiple_connect_attempts_ = true; 717 logging_multiple_connect_attempts_ = true;
717 LogConnectBegin(addresses); 718 LogConnectBegin(addresses);
718 } else { 719 } else {
719 NOTREACHED(); 720 NOTREACHED();
720 } 721 }
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } 1044 }
1044 1045
1045 bool TCPSocketWin::GetEstimatedRoundTripTime(base::TimeDelta* out_rtt) const { 1046 bool TCPSocketWin::GetEstimatedRoundTripTime(base::TimeDelta* out_rtt) const {
1046 DCHECK(out_rtt); 1047 DCHECK(out_rtt);
1047 // TODO(bmcquade): Consider implementing using 1048 // TODO(bmcquade): Consider implementing using
1048 // GetPerTcpConnectionEStats/GetPerTcp6ConnectionEStats. 1049 // GetPerTcpConnectionEStats/GetPerTcp6ConnectionEStats.
1049 return false; 1050 return false;
1050 } 1051 }
1051 1052
1052 } // namespace net 1053 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/tcp_socket_win.h ('k') | net/socket/udp_socket_posix.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698