diff options
Diffstat (limited to 'lldb/source/Host/common/Socket.cpp')
-rw-r--r-- | lldb/source/Host/common/Socket.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lldb/source/Host/common/Socket.cpp b/lldb/source/Host/common/Socket.cpp index 6b9cb480067..6fa161af351 100644 --- a/lldb/source/Host/common/Socket.cpp +++ b/lldb/source/Host/common/Socket.cpp @@ -19,6 +19,8 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Errno.h" +#include "llvm/Support/Error.h" +#include "llvm/Support/WindowsError.h" #ifndef LLDB_DISABLE_POSIX #include "lldb/Host/posix/DomainSocket.h" @@ -78,6 +80,31 @@ Socket::Socket(SocketProtocol protocol, bool should_close, Socket::~Socket() { Close(); } +llvm::Error Socket::Initialize() { +#if defined(_WIN32) + auto wVersion = WINSOCK_VERSION; + WSADATA wsaData; + int err = ::WSAStartup(wVersion, &wsaData); + if (err == 0) { + if (wsaData.wVersion < wVersion) { + WSACleanup(); + return llvm::make_error<llvm::StringError>( + "WSASock version is not expected.", llvm::inconvertibleErrorCode()); + } + } else { + return llvm::errorCodeToError(llvm::mapWindowsError(::WSAGetLastError())); + } +#endif + + return llvm::Error::success(); +} + +void Socket::Terminate() { +#if defined(_WIN32) + ::WSACleanup(); +#endif +} + std::unique_ptr<Socket> Socket::Create(const SocketProtocol protocol, bool child_processes_inherit, Status &error) { |