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

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

Issue 515653003: Set the internal listen socket only when it opens to socket successfully. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a unittest listening again after failure. Created 6 years, 3 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 | « no previous file | net/socket/unix_domain_server_socket_posix_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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/unix_domain_server_socket_posix.h" 5 #include "net/socket/unix_domain_server_socket_posix.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <sys/socket.h> 8 #include <sys/socket.h>
9 #include <sys/un.h> 9 #include <sys/un.h>
10 #include <unistd.h> 10 #include <unistd.h>
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 int backlog) { 56 int backlog) {
57 DCHECK(!listen_socket_); 57 DCHECK(!listen_socket_);
58 58
59 SockaddrStorage address; 59 SockaddrStorage address;
60 if (!UnixDomainClientSocket::FillAddress(unix_domain_path, 60 if (!UnixDomainClientSocket::FillAddress(unix_domain_path,
61 use_abstract_namespace_, 61 use_abstract_namespace_,
62 &address)) { 62 &address)) {
63 return ERR_ADDRESS_INVALID; 63 return ERR_ADDRESS_INVALID;
64 } 64 }
65 65
66 listen_socket_.reset(new SocketLibevent); 66 scoped_ptr<SocketLibevent> socket(new SocketLibevent);
67 int rv = listen_socket_->Open(AF_UNIX); 67 int rv = socket->Open(AF_UNIX);
68 DCHECK_NE(ERR_IO_PENDING, rv); 68 DCHECK_NE(ERR_IO_PENDING, rv);
69 if (rv != OK) 69 if (rv != OK)
70 return rv; 70 return rv;
71 71
72 rv = listen_socket_->Bind(address); 72 rv = socket->Bind(address);
73 DCHECK_NE(ERR_IO_PENDING, rv); 73 DCHECK_NE(ERR_IO_PENDING, rv);
74 if (rv != OK) { 74 if (rv != OK) {
75 PLOG(ERROR) 75 PLOG(ERROR)
76 << "Could not bind unix domain socket to " << unix_domain_path 76 << "Could not bind unix domain socket to " << unix_domain_path
77 << (use_abstract_namespace_ ? " (with abstract namespace)" : ""); 77 << (use_abstract_namespace_ ? " (with abstract namespace)" : "");
78 return rv; 78 return rv;
79 } 79 }
80 80
81 return listen_socket_->Listen(backlog); 81 rv = socket->Listen(backlog);
82 DCHECK_NE(ERR_IO_PENDING, rv);
83 if (rv != OK)
84 return rv;
85
86 listen_socket_.swap(socket);
87 return rv;
82 } 88 }
83 89
84 int UnixDomainServerSocket::GetLocalAddress(IPEndPoint* address) const { 90 int UnixDomainServerSocket::GetLocalAddress(IPEndPoint* address) const {
85 NOTIMPLEMENTED(); 91 NOTIMPLEMENTED();
86 return ERR_NOT_IMPLEMENTED; 92 return ERR_NOT_IMPLEMENTED;
87 } 93 }
88 94
89 int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket, 95 int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket,
90 const CompletionCallback& callback) { 96 const CompletionCallback& callback) {
91 DCHECK(socket); 97 DCHECK(socket);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 !auth_callback_.Run(credentials)) { 142 !auth_callback_.Run(credentials)) {
137 accept_socket_.reset(); 143 accept_socket_.reset();
138 return false; 144 return false;
139 } 145 }
140 146
141 socket->reset(new UnixDomainClientSocket(accept_socket_.Pass())); 147 socket->reset(new UnixDomainClientSocket(accept_socket_.Pass()));
142 return true; 148 return true;
143 } 149 }
144 150
145 } // namespace net 151 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/socket/unix_domain_server_socket_posix_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698