aboutsummaryrefslogtreecommitdiff
path: root/src/armnnUtils/NetworkSockets.cpp
diff options
context:
space:
mode:
authorRob Hughes <robert.hughes@arm.com>2020-01-13 11:14:59 +0000
committerRob Hughes <robert.hughes@arm.com>2020-01-21 16:01:58 +0000
commit25b7436b02514145a0289daff78f5b9f64cdd0db (patch)
treeef574302d4dda7e67e5c05b999bcd5b09d3c9190 /src/armnnUtils/NetworkSockets.cpp
parent41e92b085aa543cba57610135168185632ed0799 (diff)
downloadarmnn-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.cpp99
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
+}
+
+}
+}