diff options
Diffstat (limited to 'lldb/source/Host/posix/DomainSocket.cpp')
-rw-r--r-- | lldb/source/Host/posix/DomainSocket.cpp | 141 |
1 files changed, 64 insertions, 77 deletions
diff --git a/lldb/source/Host/posix/DomainSocket.cpp b/lldb/source/Host/posix/DomainSocket.cpp index 9dc147196c0..cb0a1d05750 100644 --- a/lldb/source/Host/posix/DomainSocket.cpp +++ b/lldb/source/Host/posix/DomainSocket.cpp @@ -21,113 +21,100 @@ using namespace lldb_private; #ifdef __ANDROID__ // Android does not have SUN_LEN #ifndef SUN_LEN -#define SUN_LEN(ptr) (offsetof(struct sockaddr_un, sun_path) + strlen((ptr)->sun_path)) +#define SUN_LEN(ptr) \ + (offsetof(struct sockaddr_un, sun_path) + strlen((ptr)->sun_path)) #endif #endif // #ifdef __ANDROID__ namespace { const int kDomain = AF_UNIX; -const int kType = SOCK_STREAM; +const int kType = SOCK_STREAM; -bool SetSockAddr(llvm::StringRef name, - const size_t name_offset, - sockaddr_un* saddr_un, - socklen_t& saddr_un_len) -{ - if (name.size() + name_offset > sizeof(saddr_un->sun_path)) - return false; +bool SetSockAddr(llvm::StringRef name, const size_t name_offset, + sockaddr_un *saddr_un, socklen_t &saddr_un_len) { + if (name.size() + name_offset > sizeof(saddr_un->sun_path)) + return false; - memset(saddr_un, 0, sizeof(*saddr_un)); - saddr_un->sun_family = kDomain; + memset(saddr_un, 0, sizeof(*saddr_un)); + saddr_un->sun_family = kDomain; - memcpy(saddr_un->sun_path + name_offset, name.data(), name.size()); + memcpy(saddr_un->sun_path + name_offset, name.data(), name.size()); - // For domain sockets we can use SUN_LEN in order to calculate size of - // sockaddr_un, but for abstract sockets we have to calculate size manually - // because of leading null symbol. - if (name_offset == 0) - saddr_un_len = SUN_LEN(saddr_un); - else - saddr_un_len = offsetof(struct sockaddr_un, sun_path) + name_offset + name.size(); + // For domain sockets we can use SUN_LEN in order to calculate size of + // sockaddr_un, but for abstract sockets we have to calculate size manually + // because of leading null symbol. + if (name_offset == 0) + saddr_un_len = SUN_LEN(saddr_un); + else + saddr_un_len = + offsetof(struct sockaddr_un, sun_path) + name_offset + name.size(); #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) - saddr_un->sun_len = saddr_un_len; + saddr_un->sun_len = saddr_un_len; #endif - return true; + return true; } - } DomainSocket::DomainSocket(NativeSocket socket) - : Socket(socket, ProtocolUnixDomain, true) -{ -} + : Socket(socket, ProtocolUnixDomain, true) {} DomainSocket::DomainSocket(bool child_processes_inherit, Error &error) - : DomainSocket(CreateSocket(kDomain, kType, 0, child_processes_inherit, error)) -{ -} - -DomainSocket::DomainSocket(SocketProtocol protocol, bool child_processes_inherit, Error &error) - : Socket(CreateSocket(kDomain, kType, 0, child_processes_inherit, error), protocol, true) -{ -} - -Error -DomainSocket::Connect(llvm::StringRef name) -{ - sockaddr_un saddr_un; - socklen_t saddr_un_len; - if (!SetSockAddr(name, GetNameOffset(), &saddr_un, saddr_un_len)) - return Error("Failed to set socket address"); - - Error error; - if (::connect(GetNativeSocket(), (struct sockaddr *)&saddr_un, saddr_un_len) < 0) - SetLastError (error); + : DomainSocket( + CreateSocket(kDomain, kType, 0, child_processes_inherit, error)) {} + +DomainSocket::DomainSocket(SocketProtocol protocol, + bool child_processes_inherit, Error &error) + : Socket(CreateSocket(kDomain, kType, 0, child_processes_inherit, error), + protocol, true) {} + +Error DomainSocket::Connect(llvm::StringRef name) { + sockaddr_un saddr_un; + socklen_t saddr_un_len; + if (!SetSockAddr(name, GetNameOffset(), &saddr_un, saddr_un_len)) + return Error("Failed to set socket address"); + + Error error; + if (::connect(GetNativeSocket(), (struct sockaddr *)&saddr_un, saddr_un_len) < + 0) + SetLastError(error); - return error; + return error; } -Error -DomainSocket::Listen(llvm::StringRef name, int backlog) -{ - sockaddr_un saddr_un; - socklen_t saddr_un_len; - if (!SetSockAddr(name, GetNameOffset(), &saddr_un, saddr_un_len)) - return Error("Failed to set socket address"); +Error DomainSocket::Listen(llvm::StringRef name, int backlog) { + sockaddr_un saddr_un; + socklen_t saddr_un_len; + if (!SetSockAddr(name, GetNameOffset(), &saddr_un, saddr_un_len)) + return Error("Failed to set socket address"); - DeleteSocketFile(name); + DeleteSocketFile(name); - Error error; - if (::bind(GetNativeSocket(), (struct sockaddr *)&saddr_un, saddr_un_len) == 0) - if (::listen(GetNativeSocket(), backlog) == 0) - return error; + Error error; + if (::bind(GetNativeSocket(), (struct sockaddr *)&saddr_un, saddr_un_len) == + 0) + if (::listen(GetNativeSocket(), backlog) == 0) + return error; - SetLastError(error); - return error; + SetLastError(error); + return error; } -Error -DomainSocket::Accept(llvm::StringRef name, bool child_processes_inherit, Socket *&socket) -{ - Error error; - auto conn_fd = AcceptSocket(GetNativeSocket(), nullptr, nullptr, child_processes_inherit, error); - if (error.Success()) - socket = new DomainSocket(conn_fd); +Error DomainSocket::Accept(llvm::StringRef name, bool child_processes_inherit, + Socket *&socket) { + Error error; + auto conn_fd = AcceptSocket(GetNativeSocket(), nullptr, nullptr, + child_processes_inherit, error); + if (error.Success()) + socket = new DomainSocket(conn_fd); - return error; + return error; } -size_t -DomainSocket::GetNameOffset() const -{ - return 0; -} +size_t DomainSocket::GetNameOffset() const { return 0; } -void -DomainSocket::DeleteSocketFile(llvm::StringRef name) -{ - FileSystem::Unlink(FileSpec{name, true}); +void DomainSocket::DeleteSocketFile(llvm::StringRef name) { + FileSystem::Unlink(FileSpec{name, true}); } |