blob: aa9164e1d2a6b08cd32d2220c1e4b7f12c7141ea [file] [log] [blame]
Rob Hughes25b74362020-01-13 11:14:59 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "NetworkSockets.hpp"
7
8#if defined(__unix__)
9#include <unistd.h>
10#include <fcntl.h>
11#endif
12
13namespace armnnUtils
14{
15namespace Sockets
16{
17
18bool Initialize()
19{
20#if defined(__unix__)
21 return true;
22#elif defined(_MSC_VER)
23 WSADATA wsaData;
24 return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
25#endif
26}
27
28int Close(Socket s)
29{
30#if defined(__unix__)
31 return close(s);
32#elif defined(_MSC_VER)
33 return closesocket(s);
34#endif
35}
36
37
38bool SetNonBlocking(Socket s)
39{
40#if defined(__unix__)
41 const int currentFlags = fcntl(s, F_GETFL);
42 return fcntl(s, F_SETFL, currentFlags | O_NONBLOCK) == 0;
43#elif defined(_MSC_VER)
44 u_long mode = 1;
45 return ioctlsocket(s, FIONBIO, &mode) == 0;
46#endif
47}
48
49
50long Write(Socket s, const void* buf, size_t len)
51{
52#if defined(__unix__)
53 return write(s, buf, len);
54#elif defined(_MSC_VER)
55 return send(s, static_cast<const char*>(buf), len, 0);
56#endif
57}
58
59
60long Read(Socket s, void* buf, size_t len)
61{
62#if defined(__unix__)
63 return read(s, buf, len);
64#elif defined(_MSC_VER)
65 return recv(s, static_cast<char*>(buf), len, 0);
66#endif
67}
68
David Monahan5277ad52020-01-22 15:40:34 +000069int Ioctl(Socket s, unsigned long int cmd, void* arg)
Rob Hughes25b74362020-01-13 11:14:59 +000070{
David Monahan5277ad52020-01-22 15:40:34 +000071#if defined(__ANDROID__)
72 return ioctl(s, static_cast<int>(cmd), arg);
73#elif defined(__unix__)
Rob Hughes25b74362020-01-13 11:14:59 +000074 return ioctl(s, cmd, arg);
75#elif defined(_MSC_VER)
76 return ioctlsocket(s, cmd, static_cast<u_long*>(arg));
77#endif
78}
79
80
David Monahan5277ad52020-01-22 15:40:34 +000081int Poll(PollFd* fds, nfds_t numFds, int timeout)
Rob Hughes25b74362020-01-13 11:14:59 +000082{
83#if defined(__unix__)
84 return poll(fds, numFds, timeout);
85#elif defined(_MSC_VER)
86 return WSAPoll(fds, numFds, timeout);
87#endif
88}
89
90
91armnnUtils::Sockets::Socket Accept(Socket s, sockaddr* addr, unsigned int* addrlen, int flags)
92{
93#if defined(__unix__)
94 return accept4(s, addr, addrlen, flags);
95#elif defined(_MSC_VER)
96 return accept(s, addr, reinterpret_cast<int*>(addrlen));
97#endif
98}
99
100}
101}