diff options
author | Rob Hughes <robert.hughes@arm.com> | 2020-01-13 11:14:59 +0000 |
---|---|---|
committer | Rob Hughes <robert.hughes@arm.com> | 2020-01-21 16:01:58 +0000 |
commit | 25b7436b02514145a0289daff78f5b9f64cdd0db (patch) | |
tree | ef574302d4dda7e67e5c05b999bcd5b09d3c9190 /src/armnnUtils/NetworkSockets.cpp | |
parent | 41e92b085aa543cba57610135168185632ed0799 (diff) | |
download | armnn-25b7436b02514145a0289daff78f5b9f64cdd0db.tar.gz |
Add thin abstraction layer for network sockets
This makes SocketProfilingConnection and GatordMock work on Windows as
well as Linux
Change-Id: I4b10c079b653a1c3f61eb20694e5b5f8a6f5fdfb
Signed-off-by: Robert Hughes <robert.hughes@arm.com>
Diffstat (limited to 'src/armnnUtils/NetworkSockets.cpp')
-rw-r--r-- | src/armnnUtils/NetworkSockets.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/armnnUtils/NetworkSockets.cpp b/src/armnnUtils/NetworkSockets.cpp new file mode 100644 index 0000000000..cc28a90c48 --- /dev/null +++ b/src/armnnUtils/NetworkSockets.cpp @@ -0,0 +1,99 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "NetworkSockets.hpp" + +#if defined(__unix__) +#include <unistd.h> +#include <fcntl.h> +#endif + +namespace armnnUtils +{ +namespace Sockets +{ + +bool Initialize() +{ +#if defined(__unix__) + return true; +#elif defined(_MSC_VER) + WSADATA wsaData; + return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0; +#endif +} + +int Close(Socket s) +{ +#if defined(__unix__) + return close(s); +#elif defined(_MSC_VER) + return closesocket(s); +#endif +} + + +bool SetNonBlocking(Socket s) +{ +#if defined(__unix__) + const int currentFlags = fcntl(s, F_GETFL); + return fcntl(s, F_SETFL, currentFlags | O_NONBLOCK) == 0; +#elif defined(_MSC_VER) + u_long mode = 1; + return ioctlsocket(s, FIONBIO, &mode) == 0; +#endif +} + + +long Write(Socket s, const void* buf, size_t len) +{ +#if defined(__unix__) + return write(s, buf, len); +#elif defined(_MSC_VER) + return send(s, static_cast<const char*>(buf), len, 0); +#endif +} + + +long Read(Socket s, void* buf, size_t len) +{ +#if defined(__unix__) + return read(s, buf, len); +#elif defined(_MSC_VER) + return recv(s, static_cast<char*>(buf), len, 0); +#endif +} + +int Ioctl(Socket s, unsigned long cmd, void* arg) +{ +#if defined(__unix__) + return ioctl(s, cmd, arg); +#elif defined(_MSC_VER) + return ioctlsocket(s, cmd, static_cast<u_long*>(arg)); +#endif +} + + +int Poll(PollFd* fds, size_t numFds, int timeout) +{ +#if defined(__unix__) + return poll(fds, numFds, timeout); +#elif defined(_MSC_VER) + return WSAPoll(fds, numFds, timeout); +#endif +} + + +armnnUtils::Sockets::Socket Accept(Socket s, sockaddr* addr, unsigned int* addrlen, int flags) +{ +#if defined(__unix__) + return accept4(s, addr, addrlen, flags); +#elif defined(_MSC_VER) + return accept(s, addr, reinterpret_cast<int*>(addrlen)); +#endif +} + +} +} |