summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host/common
diff options
context:
space:
mode:
authorOleksiy Vyalov <ovyalov@google.com>2015-10-22 17:50:33 +0000
committerOleksiy Vyalov <ovyalov@google.com>2015-10-22 17:50:33 +0000
commit179c51e006dfe9609ecbd3753f7d19195a5a96f6 (patch)
tree5af11d459669367c4968b278bc47b20e11cfb426 /lldb/source/Host/common
parent35ae68001852d0eb7553bf5c40d5959744cc673e (diff)
downloadbcm5719-llvm-179c51e006dfe9609ecbd3753f7d19195a5a96f6.tar.gz
bcm5719-llvm-179c51e006dfe9609ecbd3753f7d19195a5a96f6.zip
Add support for abstract domain sockets.
http://reviews.llvm.org/D13970 llvm-svn: 251034
Diffstat (limited to 'lldb/source/Host/common')
-rw-r--r--lldb/source/Host/common/Socket.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/lldb/source/Host/common/Socket.cpp b/lldb/source/Host/common/Socket.cpp
index b080e38f9c8..3cabcf6a543 100644
--- a/lldb/source/Host/common/Socket.cpp
+++ b/lldb/source/Host/common/Socket.cpp
@@ -30,6 +30,10 @@
#include <sys/un.h>
#endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
+
#ifdef __ANDROID_NDK__
#include <linux/tcp.h>
#include <bits/error_constants.h>
@@ -190,6 +194,44 @@ Error Socket::UnixDomainAccept(llvm::StringRef name, bool child_processes_inheri
return error;
}
+Error
+Socket::UnixAbstractConnect(llvm::StringRef name, bool child_processes_inherit, Socket *&socket)
+{
+ Error error;
+#ifdef __linux__
+ std::unique_ptr<Socket> connect_socket(new AbstractSocket(child_processes_inherit, error));
+ if (error.Fail())
+ return error;
+
+ error = connect_socket->Connect(name);
+ if (error.Success())
+ socket = connect_socket.release();
+#else
+ error.SetErrorString("Abstract domain sockets are not supported on this platform.");
+#endif
+ return error;
+}
+
+Error
+Socket::UnixAbstractAccept(llvm::StringRef name, bool child_processes_inherit, Socket *&socket)
+{
+ Error error;
+#ifdef __linux__
+ std::unique_ptr<Socket> listen_socket(new AbstractSocket(child_processes_inherit, error));
+ if (error.Fail())
+ return error;
+
+ error = listen_socket->Listen(name, 5);
+ if (error.Fail())
+ return error;
+
+ error = listen_socket->Accept(name, child_processes_inherit, socket);
+#else
+ error.SetErrorString("Abstract domain sockets are not supported on this platform.");
+#endif
+ return error;
+}
+
bool
Socket::DecodeHostAndPort(llvm::StringRef host_and_port,
std::string &host_str,
OpenPOWER on IntegriCloud