blob: 7f47c79b317da01d30eef3bd29c73742ae330019 [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
Jim Flynn6da6a452020-07-14 14:26:27 +01008#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +00009#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{
Jim Flynn6da6a452020-07-14 14:26:27 +010022#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000023 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{
Jim Flynn6da6a452020-07-14 14:26:27 +010032#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000033 return close(s);
34#elif defined(_MSC_VER)
35 return closesocket(s);
36#endif
37}
38
39
40bool SetNonBlocking(Socket s)
41{
Jim Flynn6da6a452020-07-14 14:26:27 +010042#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000043 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{
Jim Flynn6da6a452020-07-14 14:26:27 +010054#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000055 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{
Jim Flynn6da6a452020-07-14 14:26:27 +010064#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000065 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{
Jim Flynn6da6a452020-07-14 14:26:27 +010073#if defined(__unix__) || defined(__APPLE__)
Finn Williamsbadcc3f2020-05-22 14:28:15 +010074 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{
Jim Flynn6da6a452020-07-14 14:26:27 +010085#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000086 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);
Jim Flynn6da6a452020-07-14 14:26:27 +010097#elif defined(__APPLE__)
98 return accept(s, addr, addrlen);
Rob Hughes25b74362020-01-13 11:14:59 +000099#elif defined(_MSC_VER)
100 return accept(s, addr, reinterpret_cast<int*>(addrlen));
101#endif
102}
103
104}
105}