1 #ifndef _DESOCKET_H 2 #define _DESOCKET_H 3 /*------------------------------------------------------------------------- 4 * drawElements Utility Library 5 * ---------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Socket abstraction. 24 * 25 * Socket API is thread-safe except to: 26 * - listen() 27 * - connect() 28 * - destroy() 29 *//*--------------------------------------------------------------------*/ 30 31 #include "deDefs.h" 32 33 DE_BEGIN_EXTERN_C 34 35 /* Socket types. */ 36 typedef struct deSocket_s deSocket; 37 typedef struct deSocketAddress_s deSocketAddress; 38 39 typedef enum deSocketFamily_e 40 { 41 DE_SOCKETFAMILY_INET4 = 0, 42 DE_SOCKETFAMILY_INET6, 43 44 DE_SOCKETFAMILY_LAST 45 } deSocketFamily; 46 47 typedef enum deSocketType_e 48 { 49 DE_SOCKETTYPE_STREAM = 0, 50 DE_SOCKETTYPE_DATAGRAM, 51 52 DE_SOCKETTYPE_LAST 53 } deSocketType; 54 55 typedef enum deSocketProtocol_e 56 { 57 DE_SOCKETPROTOCOL_TCP = 0, 58 DE_SOCKETPROTOCOL_UDP, 59 60 DE_SOCKETPROTOCOL_LAST 61 } deSocketProtocol; 62 63 typedef enum deSocketFlag_e 64 { 65 DE_SOCKET_KEEPALIVE = (1<<0), 66 DE_SOCKET_NODELAY = (1<<1), 67 DE_SOCKET_NONBLOCKING = (1<<2), 68 DE_SOCKET_CLOSE_ON_EXEC = (1<<3) 69 } deSocketFlag; 70 71 /* \todo [2012-07-09 pyry] Separate closed bits for send and receive channels. */ 72 73 typedef enum deSocketState_e 74 { 75 DE_SOCKETSTATE_CLOSED = 0, 76 DE_SOCKETSTATE_CONNECTED = 1, 77 DE_SOCKETSTATE_LISTENING = 2, 78 DE_SOCKETSTATE_DISCONNECTED = 3, 79 80 DE_SOCKETSTATE_LAST 81 } deSocketState; 82 83 typedef enum deSocketResult_e 84 { 85 DE_SOCKETRESULT_SUCCESS = 0, 86 DE_SOCKETRESULT_WOULD_BLOCK = 1, 87 DE_SOCKETRESULT_CONNECTION_CLOSED = 2, 88 DE_SOCKETRESULT_CONNECTION_TERMINATED = 3, 89 DE_SOCKETRESULT_ERROR = 4, 90 91 DE_SOCKETRESULT_LAST 92 } deSocketResult; 93 94 typedef enum deSocketChannel_e 95 { 96 DE_SOCKETCHANNEL_RECEIVE = (1<<0), 97 DE_SOCKETCHANNEL_SEND = (1<<1), 98 99 DE_SOCKETCHANNEL_BOTH = DE_SOCKETCHANNEL_RECEIVE|DE_SOCKETCHANNEL_SEND 100 } deSocketChannel; 101 102 /* Socket API, similar to Berkeley sockets. */ 103 104 deSocketAddress* deSocketAddress_create (void); 105 void deSocketAddress_destroy (deSocketAddress* address); 106 107 deBool deSocketAddress_setFamily (deSocketAddress* address, deSocketFamily family); 108 deSocketFamily deSocketAddress_getFamily (const deSocketAddress* address); 109 deBool deSocketAddress_setType (deSocketAddress* address, deSocketType type); 110 deSocketType deSocketAddress_getType (const deSocketAddress* address); 111 deBool deSocketAddress_setProtocol (deSocketAddress* address, deSocketProtocol protocol); 112 deSocketProtocol deSocketAddress_getProtocol (const deSocketAddress* address); 113 deBool deSocketAddress_setPort (deSocketAddress* address, int port); 114 int deSocketAddress_getPort (const deSocketAddress* address); 115 deBool deSocketAddress_setHost (deSocketAddress* address, const char* host); 116 const char* deSocketAddress_getHost (const deSocketAddress* address); 117 118 deSocket* deSocket_create (void); 119 void deSocket_destroy (deSocket* socket); 120 121 deSocketState deSocket_getState (const deSocket* socket); 122 deUint32 deSocket_getOpenChannels (const deSocket* socket); 123 124 deBool deSocket_setFlags (deSocket* socket, deUint32 flags); 125 126 deBool deSocket_listen (deSocket* socket, const deSocketAddress* address); 127 deSocket* deSocket_accept (deSocket* socket, deSocketAddress* clientAddress); 128 129 deBool deSocket_connect (deSocket* socket, const deSocketAddress* address); 130 131 deBool deSocket_shutdown (deSocket* socket, deUint32 channels); 132 deBool deSocket_close (deSocket* socket); 133 134 deSocketResult deSocket_send (deSocket* socket, const void* buf, size_t bufSize, size_t* numSent); 135 deSocketResult deSocket_receive (deSocket* socket, void* buf, size_t bufSize, size_t* numReceived); 136 137 /* Utilities. */ 138 139 const char* deGetSocketFamilyName (deSocketFamily family); 140 const char* deGetSocketResultName (deSocketResult result); 141 142 DE_END_EXTERN_C 143 144 #endif /* _DESOCKET_H */ 145