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

Unified Diff: net/socket/unix_domain_server_socket_posix.cc

Issue 509133002: Raw SocketDescriptor variant of UnixDomainServerSocket::Accept (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address nits; waiting on mmenke for broader comments. 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 side-by-side diff with in-line comments
Download patch
Index: net/socket/unix_domain_server_socket_posix.cc
diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc
index 4ab0b834e624e81c94da14cc9dae2048b2d49ed0..950ed883c5a8f745f3e2bbd00e32d1540d367be1 100644
--- a/net/socket/unix_domain_server_socket_posix.cc
+++ b/net/socket/unix_domain_server_socket_posix.cc
@@ -16,6 +16,19 @@
namespace net {
+namespace {
+// Intended for use as SetterCallbacks in Accept() helper methods.
+void SetStreamSocket(scoped_ptr<StreamSocket>* socket,
+ scoped_ptr<SocketLibevent> accepted_socket) {
+ socket->reset(new UnixDomainClientSocket(accepted_socket.Pass()));
+}
+
+void SetSocketDescriptor(SocketDescriptor* socket,
+ scoped_ptr<SocketLibevent> accepted_socket) {
+ *socket = accepted_socket->ReleaseConnectedSocket();
+}
+} // anonymous nanmespace
mmenke 2014/09/03 14:56:46 nit: -anonymous, nanmespace -> namespace
mmenke 2014/09/03 14:56:46 nit: I believe blank lines before end and after s
Chris Masone 2014/09/03 15:57:12 Done.
Chris Masone 2014/09/03 15:57:12 Done.
+
UnixDomainServerSocket::UnixDomainServerSocket(
const AuthCallback& auth_callback,
bool use_abstract_namespace)
@@ -95,6 +108,23 @@ int UnixDomainServerSocket::GetLocalAddress(IPEndPoint* address) const {
int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket,
const CompletionCallback& callback) {
DCHECK(socket);
+
+ SetterCallback setter_callback = base::Bind(&SetStreamSocket, socket);
+ return DoAccept(setter_callback, callback);
+}
+
+int UnixDomainServerSocket::AcceptSocketDescriptor(
+ SocketDescriptor* socket,
+ const CompletionCallback& callback) {
+ DCHECK(socket);
+
+ SetterCallback setter_callback = base::Bind(&SetSocketDescriptor, socket);
+ return DoAccept(setter_callback, callback);
+}
+
+int UnixDomainServerSocket::DoAccept(const SetterCallback& setter_callback,
+ const CompletionCallback& callback) {
+ DCHECK(!setter_callback.is_null());
DCHECK(!callback.is_null());
DCHECK(listen_socket_);
DCHECK(!accept_socket_);
@@ -103,38 +133,41 @@ int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket,
int rv = listen_socket_->Accept(
&accept_socket_,
base::Bind(&UnixDomainServerSocket::AcceptCompleted,
- base::Unretained(this), socket, callback));
+ base::Unretained(this),
+ setter_callback,
+ callback));
if (rv != OK)
return rv;
- if (AuthenticateAndGetStreamSocket(socket))
+ if (AuthenticateAndGetStreamSocket(setter_callback))
return OK;
// Accept another socket because authentication error should be transparent
// to the caller.
}
}
-void UnixDomainServerSocket::AcceptCompleted(scoped_ptr<StreamSocket>* socket,
- const CompletionCallback& callback,
- int rv) {
+void UnixDomainServerSocket::AcceptCompleted(
+ const SetterCallback& setter_callback,
+ const CompletionCallback& callback,
+ int rv) {
if (rv != OK) {
callback.Run(rv);
return;
}
- if (AuthenticateAndGetStreamSocket(socket)) {
+ if (AuthenticateAndGetStreamSocket(setter_callback)) {
callback.Run(OK);
return;
}
// Accept another socket because authentication error should be transparent
// to the caller.
- rv = Accept(socket, callback);
+ rv = DoAccept(setter_callback, callback);
if (rv != ERR_IO_PENDING)
callback.Run(rv);
}
bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket(
- scoped_ptr<StreamSocket>* socket) {
+ const SetterCallback& setter_callback) {
DCHECK(accept_socket_);
Credentials credentials;
@@ -144,7 +177,7 @@ bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket(
return false;
}
- socket->reset(new UnixDomainClientSocket(accept_socket_.Pass()));
+ setter_callback.Run(accept_socket_.Pass());
return true;
}

Powered by Google App Engine
This is Rietveld 408576698