xref: /aosp_15_r20/external/armnn/profiling/common/src/NetworkSockets.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #if !defined(ARMNN_DISABLE_SOCKETS)
7 
8 #include <common/include/NetworkSockets.hpp>
9 
10 #if defined(__unix__) || defined(__APPLE__)
11 #include <unistd.h>
12 #include <fcntl.h>
13 #endif
14 
15 #include <common/include/Conversion.hpp>
16 #include <common/include/IgnoreUnused.hpp>
17 #include <common/include/NumericCast.hpp>
18 
19 namespace arm
20 {
21 namespace pipe
22 {
23 
Initialize()24 bool Initialize()
25 {
26 #if defined(__unix__) || defined(__APPLE__)
27     return true;
28 #elif defined(_MSC_VER) || defined(__MINGW32__)
29     WSADATA wsaData;
30     return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
31 #endif
32 }
33 
Close(Socket s)34 int Close(Socket s)
35 {
36 #if defined(__unix__) || defined(__APPLE__)
37     return close(s);
38 #elif defined(_MSC_VER) || defined(__MINGW32__)
39     return closesocket(s);
40 #endif
41 }
42 
43 
SetNonBlocking(Socket s)44 bool SetNonBlocking(Socket s)
45 {
46 #if defined(__unix__) || defined(__APPLE__)
47     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;
52 #elif defined(__MINGW32__)
53     u_long mode = 1;
54     return ioctlsocket(s, arm::pipe::numeric_cast<long>(FIONBIO), &mode) == 0;
55 #endif
56 }
57 
58 
Write(Socket s,const void * buf,size_t len)59 long Write(Socket s, const void* buf, size_t len)
60 {
61 #if defined(__unix__) || defined(__APPLE__)
62     return write(s, buf, len);
63 #elif defined(_MSC_VER) || defined(__MINGW32__)
64     return send(s, static_cast<const char*>(buf), static_cast<int>(len), 0);
65 #endif
66 }
67 
68 
Read(Socket s,void * buf,size_t len)69 long Read(Socket s, void* buf, size_t len)
70 {
71 #if defined(__unix__) || defined(__APPLE__)
72     return read(s, buf, len);
73 #elif defined(_MSC_VER) || defined(__MINGW32__)
74     return recv(s, static_cast<char*>(buf), static_cast<int>(len), 0);
75 #endif
76 }
77 
Ioctl(Socket s,unsigned long int cmd,void * arg)78 int Ioctl(Socket s, unsigned long int cmd, void* arg)
79 {
80 #if defined(__unix__) || defined(__APPLE__)
81     ARM_PIPE_NO_CONVERSION_WARN_BEGIN
82     return ioctl(s, static_cast<int>(cmd), arg);
83     ARM_PIPE_NO_CONVERSION_WARN_END
84 #elif defined(_MSC_VER) || defined(__MINGW32__)
85     ARM_PIPE_NO_CONVERSION_WARN_BEGIN
86     return ioctlsocket(s, cmd, static_cast<u_long*>(arg));
87     ARM_PIPE_NO_CONVERSION_WARN_END
88 #endif
89 }
90 
91 
Poll(PollFd * fds,nfds_t numFds,int timeout)92 int Poll(PollFd* fds, nfds_t numFds, int timeout)
93 {
94 #if defined(__unix__) || defined(__APPLE__)
95     return poll(fds, numFds, timeout);
96 #elif defined(_MSC_VER) || defined(__MINGW32__)
97     return WSAPoll(fds, arm::pipe::numeric_cast<unsigned long>(numFds), timeout);
98 #endif
99 }
100 
101 
Accept(Socket s,sockaddr * addr,socklen_t * addrlen,int flags)102 arm::pipe::Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags)
103 {
104 #if defined(__unix__)
105     return accept4(s, addr, addrlen, flags);
106 #elif defined(__APPLE__)
107     IgnoreUnused(flags);
108     return accept(s, addr, addrlen);
109 #elif defined(_MSC_VER) || defined(__MINGW32__)
110     IgnoreUnused(flags);
111     return accept(s, addr, reinterpret_cast<int*>(addrlen));
112 #endif
113 }
114 
115 } // pipe
116 } // arm
117 
118 #endif
119