blob: 84711c621562d3fbbb013972aa2411ed7b321464 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Rob Hughes25b74362020-01-13 11:14:59 +00003// SPDX-License-Identifier: MIT
4//
5
Jim Flynne195a042022-04-12 17:19:28 +01006#if !defined(ARMNN_DISABLE_SOCKETS)
7
Jim Flynnbbfe6032020-07-20 16:57:44 +01008#include <common/include/NetworkSockets.hpp>
Rob Hughes25b74362020-01-13 11:14:59 +00009
Jim Flynn6da6a452020-07-14 14:26:27 +010010#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000011#include <unistd.h>
12#include <fcntl.h>
13#endif
14
Rob Hughes35c31c02020-08-17 15:47:20 +010015#include <common/include/Conversion.hpp>
Jim Flynnbbfe6032020-07-20 16:57:44 +010016#include <common/include/IgnoreUnused.hpp>
Jim Flynnbbfe6032020-07-20 16:57:44 +010017#include <common/include/NumericCast.hpp>
Jim Flynnbbfe6032020-07-20 16:57:44 +010018
19namespace arm
Rob Hughes25b74362020-01-13 11:14:59 +000020{
Jim Flynnbbfe6032020-07-20 16:57:44 +010021namespace pipe
Rob Hughes25b74362020-01-13 11:14:59 +000022{
23
24bool Initialize()
25{
Jim Flynn6da6a452020-07-14 14:26:27 +010026#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000027 return true;
Jim Flynnbbfe6032020-07-20 16:57:44 +010028#elif defined(_MSC_VER) || defined(__MINGW32__)
Rob Hughes25b74362020-01-13 11:14:59 +000029 WSADATA wsaData;
30 return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
31#endif
32}
33
34int Close(Socket s)
35{
Jim Flynn6da6a452020-07-14 14:26:27 +010036#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000037 return close(s);
Jim Flynnbbfe6032020-07-20 16:57:44 +010038#elif defined(_MSC_VER) || defined(__MINGW32__)
Rob Hughes25b74362020-01-13 11:14:59 +000039 return closesocket(s);
40#endif
41}
42
43
44bool SetNonBlocking(Socket s)
45{
Jim Flynn6da6a452020-07-14 14:26:27 +010046#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000047 const int currentFlags = fcntl(s, F_GETFL);
48 return fcntl(s, F_SETFL, currentFlags | O_NONBLOCK) == 0;
49#elif defined(_MSC_VER)
50 u_long mode = 1;
51 return ioctlsocket(s, FIONBIO, &mode) == 0;
Jim Flynnbbfe6032020-07-20 16:57:44 +010052#elif defined(__MINGW32__)
53 u_long mode = 1;
54 return ioctlsocket(s, arm::pipe::numeric_cast<long>(FIONBIO), &mode) == 0;
Rob Hughes25b74362020-01-13 11:14:59 +000055#endif
56}
57
58
59long Write(Socket s, const void* buf, size_t len)
60{
Jim Flynn6da6a452020-07-14 14:26:27 +010061#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000062 return write(s, buf, len);
Jim Flynnbbfe6032020-07-20 16:57:44 +010063#elif defined(_MSC_VER) || defined(__MINGW32__)
Rob Hughesb98032f2020-04-24 11:41:34 +010064 return send(s, static_cast<const char*>(buf), static_cast<int>(len), 0);
Rob Hughes25b74362020-01-13 11:14:59 +000065#endif
66}
67
68
69long Read(Socket s, void* buf, size_t len)
70{
Jim Flynn6da6a452020-07-14 14:26:27 +010071#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000072 return read(s, buf, len);
Jim Flynnbbfe6032020-07-20 16:57:44 +010073#elif defined(_MSC_VER) || defined(__MINGW32__)
Rob Hughesb98032f2020-04-24 11:41:34 +010074 return recv(s, static_cast<char*>(buf), static_cast<int>(len), 0);
Rob Hughes25b74362020-01-13 11:14:59 +000075#endif
76}
77
David Monahan5277ad52020-01-22 15:40:34 +000078int Ioctl(Socket s, unsigned long int cmd, void* arg)
Rob Hughes25b74362020-01-13 11:14:59 +000079{
Jim Flynn6da6a452020-07-14 14:26:27 +010080#if defined(__unix__) || defined(__APPLE__)
Jim Flynnbbfe6032020-07-20 16:57:44 +010081 ARM_PIPE_NO_CONVERSION_WARN_BEGIN
David Monahan5277ad52020-01-22 15:40:34 +000082 return ioctl(s, static_cast<int>(cmd), arg);
Jim Flynnbbfe6032020-07-20 16:57:44 +010083 ARM_PIPE_NO_CONVERSION_WARN_END
84#elif defined(_MSC_VER) || defined(__MINGW32__)
85 ARM_PIPE_NO_CONVERSION_WARN_BEGIN
Rob Hughes25b74362020-01-13 11:14:59 +000086 return ioctlsocket(s, cmd, static_cast<u_long*>(arg));
Jim Flynnbbfe6032020-07-20 16:57:44 +010087 ARM_PIPE_NO_CONVERSION_WARN_END
Rob Hughes25b74362020-01-13 11:14:59 +000088#endif
89}
90
91
David Monahan5277ad52020-01-22 15:40:34 +000092int Poll(PollFd* fds, nfds_t numFds, int timeout)
Rob Hughes25b74362020-01-13 11:14:59 +000093{
Jim Flynn6da6a452020-07-14 14:26:27 +010094#if defined(__unix__) || defined(__APPLE__)
Rob Hughes25b74362020-01-13 11:14:59 +000095 return poll(fds, numFds, timeout);
Jim Flynnbbfe6032020-07-20 16:57:44 +010096#elif defined(_MSC_VER) || defined(__MINGW32__)
97 return WSAPoll(fds, arm::pipe::numeric_cast<unsigned long>(numFds), timeout);
Rob Hughes25b74362020-01-13 11:14:59 +000098#endif
99}
100
101
Jim Flynnbbfe6032020-07-20 16:57:44 +0100102arm::pipe::Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags)
Rob Hughes25b74362020-01-13 11:14:59 +0000103{
104#if defined(__unix__)
105 return accept4(s, addr, addrlen, flags);
Jim Flynn6da6a452020-07-14 14:26:27 +0100106#elif defined(__APPLE__)
Jim Flynnbbfe6032020-07-20 16:57:44 +0100107 IgnoreUnused(flags);
Jim Flynn6da6a452020-07-14 14:26:27 +0100108 return accept(s, addr, addrlen);
Jim Flynnbbfe6032020-07-20 16:57:44 +0100109#elif defined(_MSC_VER) || defined(__MINGW32__)
110 IgnoreUnused(flags);
Rob Hughes25b74362020-01-13 11:14:59 +0000111 return accept(s, addr, reinterpret_cast<int*>(addrlen));
112#endif
113}
114
Jim Flynnbbfe6032020-07-20 16:57:44 +0100115} // pipe
116} // arm
Jim Flynne195a042022-04-12 17:19:28 +0100117
118#endif