aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h')
-rw-r--r--contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h b/contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h
new file mode 100644
index 000000000000..c219792d8246
--- /dev/null
+++ b/contrib/llvm-project/llvm/include/llvm/Support/raw_socket_stream.h
@@ -0,0 +1,66 @@
+//===-- llvm/Support/raw_socket_stream.h - Socket streams --*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains raw_ostream implementations for streams to communicate
+// via UNIX sockets
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_RAW_SOCKET_STREAM_H
+#define LLVM_SUPPORT_RAW_SOCKET_STREAM_H
+
+#include "llvm/Support/Threading.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+
+class raw_socket_stream;
+
+// Make sure that calls to WSAStartup and WSACleanup are balanced.
+#ifdef _WIN32
+class WSABalancer {
+public:
+ WSABalancer();
+ ~WSABalancer();
+};
+#endif // _WIN32
+
+class ListeningSocket {
+ int FD;
+ std::string SocketPath;
+ ListeningSocket(int SocketFD, StringRef SocketPath);
+#ifdef _WIN32
+ WSABalancer _;
+#endif // _WIN32
+
+public:
+ static Expected<ListeningSocket> createUnix(
+ StringRef SocketPath,
+ int MaxBacklog = llvm::hardware_concurrency().compute_thread_count());
+ Expected<std::unique_ptr<raw_socket_stream>> accept();
+ ListeningSocket(ListeningSocket &&LS);
+ ~ListeningSocket();
+};
+class raw_socket_stream : public raw_fd_stream {
+ uint64_t current_pos() const override { return 0; }
+#ifdef _WIN32
+ WSABalancer _;
+#endif // _WIN32
+
+public:
+ raw_socket_stream(int SocketFD);
+ /// Create a \p raw_socket_stream connected to the Unix domain socket at \p
+ /// SocketPath.
+ static Expected<std::unique_ptr<raw_socket_stream>>
+ createConnectedUnix(StringRef SocketPath);
+ ~raw_socket_stream();
+};
+
+} // end namespace llvm
+
+#endif