blob: 3ae0644a0ba564555e13100c0797b4380be4ca06 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
Rob Hughes25b74362020-01-13 11:14:59 +00002// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Finn Williams9937f932020-04-29 12:00:24 +01006#include "common/include/NetworkSockets.hpp"
Rob Hughes25b74362020-01-13 11:14:59 +00007
8#if defined(__unix__)
9#include <unistd.h>
10#include <fcntl.h>
Finn Williamsbadcc3f2020-05-22 14:28:15 +010011#include <armnn/Conversion.hpp>
12
Rob Hughes25b74362020-01-13 11:14:59 +000013#endif
14
15namespace armnnUtils
16{
17namespace Sockets
18{
19
20bool Initialize()
21{
22#if defined(__unix__)
23 return true;
24#elif defined(_MSC_VER)
25 WSADATA wsaData;
26 return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
27#endif
28}
29
30int Close(Socket s)
31{
32#if defined(__unix__)
33 return close(s);
34#elif defined(_MSC_VER)
35 return closesocket(s);
36#endif
37}
38
39
40bool SetNonBlocking(Socket s)
41{
42#if defined(__unix__)
43 const int currentFlags = fcntl(s, F_GETFL);
44 return fcntl(s, F_SETFL, currentFlags | O_NONBLOCK) == 0;
45#elif defined(_MSC_VER)
46 u_long mode = 1;
47 return ioctlsocket(s, FIONBIO, &mode) == 0;
48#endif
49}
50
51
52long Write(Socket s, const void* buf, size_t len)
53{
54#if defined(__unix__)
55 return write(s, buf, len);
56#elif defined(_MSC_VER)
Rob Hughesb98032f2020-04-24 11:41:34 +010057 return send(s, static_cast<const char*>(buf), static_cast<int>(len), 0);
Rob Hughes25b74362020-01-13 11:14:59 +000058#endif
59}
60
61
62long Read(Socket s, void* buf, size_t len)
63{
64#if defined(__unix__)
65 return read(s, buf, len);
66#elif defined(_MSC_VER)
Rob Hughesb98032f2020-04-24 11:41:34 +010067 return recv(s, static_cast<char*>(buf), static_cast<int>(len), 0);
Rob Hughes25b74362020-01-13 11:14:59 +000068#endif
69}
70
David Monahan5277ad52020-01-22 15:40:34 +000071int Ioctl(Socket s, unsigned long int cmd, void* arg)
Rob Hughes25b74362020-01-13 11:14:59 +000072{
Finn Williamsbadcc3f2020-05-22 14:28:15 +010073#if defined(__unix__)
74 ARMNN_NO_CONVERSION_WARN_BEGIN
David Monahan5277ad52020-01-22 15:40:34 +000075 return ioctl(s, static_cast<int>(cmd), arg);
Finn Williamsbadcc3f2020-05-22 14:28:15 +010076 ARMNN_NO_CONVERSION_WARN_END
Rob Hughes25b74362020-01-13 11:14:59 +000077#elif defined(_MSC_VER)
78 return ioctlsocket(s, cmd, static_cast<u_long*>(arg));
79#endif
80}
81
82
David Monahan5277ad52020-01-22 15:40:34 +000083int Poll(PollFd* fds, nfds_t numFds, int timeout)
Rob Hughes25b74362020-01-13 11:14:59 +000084{
85#if defined(__unix__)
86 return poll(fds, numFds, timeout);
87#elif defined(_MSC_VER)
88 return WSAPoll(fds, numFds, timeout);
89#endif
90}
91
92
David Monahana0d18962020-01-24 09:13:33 +000093armnnUtils::Sockets::Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags)
Rob Hughes25b74362020-01-13 11:14:59 +000094{
95#if defined(__unix__)
96 return accept4(s, addr, addrlen, flags);
97#elif defined(_MSC_VER)
98 return accept(s, addr, reinterpret_cast<int*>(addrlen));
99#endif
100}
101
102}
103}