1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker // This file (along with its corresponding .cpp) defines a very thin platform abstraction layer for the use of 7*89c4ff92SAndroid Build Coastguard Worker // networking sockets. Thankfully the underlying APIs on Windows and Linux are very similar so not much conversion 8*89c4ff92SAndroid Build Coastguard Worker // is needed (typically just forwarding the parameters to a differently named function). 9*89c4ff92SAndroid Build Coastguard Worker // Some of the APIs are in fact completely identical and so no forwarding function is needed. 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker #if !defined(ARMNN_DISABLE_SOCKETS) 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker #pragma once 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker #if defined(__unix__) || defined(__APPLE__) 16*89c4ff92SAndroid Build Coastguard Worker #include <poll.h> 17*89c4ff92SAndroid Build Coastguard Worker #include <sys/ioctl.h> 18*89c4ff92SAndroid Build Coastguard Worker #include <sys/socket.h> 19*89c4ff92SAndroid Build Coastguard Worker #include <sys/un.h> 20*89c4ff92SAndroid Build Coastguard Worker #elif defined(_MSC_VER) 21*89c4ff92SAndroid Build Coastguard Worker #include <WindowsWrapper.hpp> 22*89c4ff92SAndroid Build Coastguard Worker #include <winsock2.h> 23*89c4ff92SAndroid Build Coastguard Worker #include <afunix.h> 24*89c4ff92SAndroid Build Coastguard Worker #elif defined(__MINGW32__) 25*89c4ff92SAndroid Build Coastguard Worker #include <WindowsWrapper.hpp> 26*89c4ff92SAndroid Build Coastguard Worker #include <winsock2.h> 27*89c4ff92SAndroid Build Coastguard Worker #endif 28*89c4ff92SAndroid Build Coastguard Worker 29*89c4ff92SAndroid Build Coastguard Worker namespace arm 30*89c4ff92SAndroid Build Coastguard Worker { 31*89c4ff92SAndroid Build Coastguard Worker namespace pipe 32*89c4ff92SAndroid Build Coastguard Worker { 33*89c4ff92SAndroid Build Coastguard Worker 34*89c4ff92SAndroid Build Coastguard Worker #if defined(__unix__) 35*89c4ff92SAndroid Build Coastguard Worker 36*89c4ff92SAndroid Build Coastguard Worker using Socket = int; 37*89c4ff92SAndroid Build Coastguard Worker using PollFd = pollfd; 38*89c4ff92SAndroid Build Coastguard Worker 39*89c4ff92SAndroid Build Coastguard Worker #elif defined(__APPLE__) 40*89c4ff92SAndroid Build Coastguard Worker 41*89c4ff92SAndroid Build Coastguard Worker using Socket = int; 42*89c4ff92SAndroid Build Coastguard Worker using PollFd = pollfd; 43*89c4ff92SAndroid Build Coastguard Worker #define SOCK_CLOEXEC 0 44*89c4ff92SAndroid Build Coastguard Worker 45*89c4ff92SAndroid Build Coastguard Worker #elif defined(_MSC_VER) 46*89c4ff92SAndroid Build Coastguard Worker 47*89c4ff92SAndroid Build Coastguard Worker using Socket = SOCKET; 48*89c4ff92SAndroid Build Coastguard Worker using PollFd = WSAPOLLFD; 49*89c4ff92SAndroid Build Coastguard Worker using nfds_t = int; 50*89c4ff92SAndroid Build Coastguard Worker using socklen_t = int; 51*89c4ff92SAndroid Build Coastguard Worker #define SOCK_CLOEXEC 0 52*89c4ff92SAndroid Build Coastguard Worker 53*89c4ff92SAndroid Build Coastguard Worker #elif defined(__MINGW32__) 54*89c4ff92SAndroid Build Coastguard Worker 55*89c4ff92SAndroid Build Coastguard Worker using Socket = SOCKET; 56*89c4ff92SAndroid Build Coastguard Worker using PollFd = WSAPOLLFD; 57*89c4ff92SAndroid Build Coastguard Worker using nfds_t = int; 58*89c4ff92SAndroid Build Coastguard Worker using socklen_t = int; 59*89c4ff92SAndroid Build Coastguard Worker #define SOCK_CLOEXEC 0 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Worker #endif 62*89c4ff92SAndroid Build Coastguard Worker 63*89c4ff92SAndroid Build Coastguard Worker /// Performs any required one-time setup. 64*89c4ff92SAndroid Build Coastguard Worker bool Initialize(); 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker int Close(Socket s); 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker bool SetNonBlocking(Socket s); 69*89c4ff92SAndroid Build Coastguard Worker 70*89c4ff92SAndroid Build Coastguard Worker long Write(Socket s, const void* buf, size_t len); 71*89c4ff92SAndroid Build Coastguard Worker 72*89c4ff92SAndroid Build Coastguard Worker long Read(Socket s, void* buf, size_t len); 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker int Ioctl(Socket s, unsigned long int cmd, void* arg); 75*89c4ff92SAndroid Build Coastguard Worker 76*89c4ff92SAndroid Build Coastguard Worker int Poll(PollFd* fds, nfds_t numFds, int timeout); 77*89c4ff92SAndroid Build Coastguard Worker 78*89c4ff92SAndroid Build Coastguard Worker Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags); 79*89c4ff92SAndroid Build Coastguard Worker 80*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 81*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 82*89c4ff92SAndroid Build Coastguard Worker 83*89c4ff92SAndroid Build Coastguard Worker #endif 84