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

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

Issue 185553013: Standardize error reporting of IPEndPoint::ToSockAddr and (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 9 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/socket/stream_listen_socket.cc ('k') | net/socket/tcp_socket_win.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 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 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 <netinet/in.h> 10 #include <netinet/in.h>
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 if (net_error != ERR_IO_PENDING) 604 if (net_error != ERR_IO_PENDING)
605 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, net_error); 605 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, net_error);
606 return net_error; 606 return net_error;
607 } 607 }
608 608
609 IPEndPoint ip_end_point; 609 IPEndPoint ip_end_point;
610 if (!ip_end_point.FromSockAddr(storage.addr, storage.addr_len)) { 610 if (!ip_end_point.FromSockAddr(storage.addr, storage.addr_len)) {
611 NOTREACHED(); 611 NOTREACHED();
612 if (IGNORE_EINTR(close(new_socket)) < 0) 612 if (IGNORE_EINTR(close(new_socket)) < 0)
613 PLOG(ERROR) << "close"; 613 PLOG(ERROR) << "close";
614 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, 614 int net_error = ERR_ADDRESS_INVALID;
615 ERR_ADDRESS_INVALID); 615 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, net_error);
616 return ERR_ADDRESS_INVALID; 616 return net_error;
617 } 617 }
618 scoped_ptr<TCPSocketLibevent> tcp_socket(new TCPSocketLibevent( 618 scoped_ptr<TCPSocketLibevent> tcp_socket(new TCPSocketLibevent(
619 net_log_.net_log(), net_log_.source())); 619 net_log_.net_log(), net_log_.source()));
620 int adopt_result = tcp_socket->AdoptConnectedSocket(new_socket, ip_end_point); 620 int adopt_result = tcp_socket->AdoptConnectedSocket(new_socket, ip_end_point);
621 if (adopt_result != OK) { 621 if (adopt_result != OK) {
622 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, adopt_result); 622 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_TCP_ACCEPT, adopt_result);
623 return adopt_result; 623 return adopt_result;
624 } 624 }
625 *socket = tcp_socket.Pass(); 625 *socket = tcp_socket.Pass();
626 *address = ip_end_point; 626 *address = ip_end_point;
627 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT, 627 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT,
628 CreateNetLogIPEndPointCallback(&ip_end_point)); 628 CreateNetLogIPEndPointCallback(&ip_end_point));
629 return OK; 629 return OK;
630 } 630 }
631 631
632 int TCPSocketLibevent::DoConnect() { 632 int TCPSocketLibevent::DoConnect() {
633 DCHECK_EQ(0, connect_os_error_); 633 DCHECK_EQ(0, connect_os_error_);
634 634
635 net_log_.BeginEvent(NetLog::TYPE_TCP_CONNECT_ATTEMPT, 635 net_log_.BeginEvent(NetLog::TYPE_TCP_CONNECT_ATTEMPT,
636 CreateNetLogIPEndPointCallback(peer_address_.get())); 636 CreateNetLogIPEndPointCallback(peer_address_.get()));
637 637
638 // Connect the socket. 638 // Connect the socket.
639 if (!use_tcp_fastopen_) { 639 if (!use_tcp_fastopen_) {
640 SockaddrStorage storage; 640 SockaddrStorage storage;
641 if (!peer_address_->ToSockAddr(storage.addr, &storage.addr_len)) 641 if (!peer_address_->ToSockAddr(storage.addr, &storage.addr_len))
642 return ERR_INVALID_ARGUMENT; 642 return ERR_ADDRESS_INVALID;
643 643
644 if (!HANDLE_EINTR(connect(socket_, storage.addr, storage.addr_len))) { 644 if (!HANDLE_EINTR(connect(socket_, storage.addr, storage.addr_len))) {
645 // Connected without waiting! 645 // Connected without waiting!
646 return OK; 646 return OK;
647 } 647 }
648 } else { 648 } else {
649 // With TCP FastOpen, we pretend that the socket is connected. 649 // With TCP FastOpen, we pretend that the socket is connected.
650 DCHECK(!tcp_fastopen_connected_); 650 DCHECK(!tcp_fastopen_connected_);
651 return OK; 651 return OK;
652 } 652 }
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 accept_callback_.Reset(); 818 accept_callback_.Reset();
819 callback.Run(result); 819 callback.Run(result);
820 } 820 }
821 } 821 }
822 822
823 int TCPSocketLibevent::InternalWrite(IOBuffer* buf, int buf_len) { 823 int TCPSocketLibevent::InternalWrite(IOBuffer* buf, int buf_len) {
824 int nwrite; 824 int nwrite;
825 if (use_tcp_fastopen_ && !tcp_fastopen_connected_) { 825 if (use_tcp_fastopen_ && !tcp_fastopen_connected_) {
826 SockaddrStorage storage; 826 SockaddrStorage storage;
827 if (!peer_address_->ToSockAddr(storage.addr, &storage.addr_len)) { 827 if (!peer_address_->ToSockAddr(storage.addr, &storage.addr_len)) {
828 errno = EINVAL; 828 errno = EADDRNOTAVAIL;
wtc 2014/03/04 00:43:28 Setting errno to EINVAL here was apparently an att
eroman 2014/03/04 03:01:10 That is kind of gross
829 return -1; 829 return -1;
830 } 830 }
831 831
832 int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN. 832 int flags = 0x20000000; // Magic flag to enable TCP_FASTOPEN.
833 #if defined(OS_LINUX) 833 #if defined(OS_LINUX)
834 // sendto() will fail with EPIPE when the system doesn't support TCP Fast 834 // sendto() will fail with EPIPE when the system doesn't support TCP Fast
835 // Open. Theoretically that shouldn't happen since the caller should check 835 // Open. Theoretically that shouldn't happen since the caller should check
836 // for system support on startup, but users may dynamically disable TCP Fast 836 // for system support on startup, but users may dynamically disable TCP Fast
837 // Open via sysctl. 837 // Open via sysctl.
838 flags |= MSG_NOSIGNAL; 838 flags |= MSG_NOSIGNAL;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 } 895 }
896 } else { 896 } else {
897 fast_open_status_ = (fast_open_status_ == FAST_OPEN_FAST_CONNECT_RETURN ? 897 fast_open_status_ = (fast_open_status_ == FAST_OPEN_FAST_CONNECT_RETURN ?
898 FAST_OPEN_SYN_DATA_FAILED : 898 FAST_OPEN_SYN_DATA_FAILED :
899 FAST_OPEN_NO_SYN_DATA_FAILED); 899 FAST_OPEN_NO_SYN_DATA_FAILED);
900 } 900 }
901 } 901 }
902 } 902 }
903 903
904 } // namespace net 904 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/stream_listen_socket.cc ('k') | net/socket/tcp_socket_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698