You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.3 KiB
145 lines
4.3 KiB
#ifndef _DESOCKET_H
|
|
#define _DESOCKET_H
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Utility Library
|
|
* ----------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Socket abstraction.
|
|
*
|
|
* Socket API is thread-safe except to:
|
|
* - listen()
|
|
* - connect()
|
|
* - destroy()
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "deDefs.h"
|
|
|
|
DE_BEGIN_EXTERN_C
|
|
|
|
/* Socket types. */
|
|
typedef struct deSocket_s deSocket;
|
|
typedef struct deSocketAddress_s deSocketAddress;
|
|
|
|
typedef enum deSocketFamily_e
|
|
{
|
|
DE_SOCKETFAMILY_INET4 = 0,
|
|
DE_SOCKETFAMILY_INET6,
|
|
|
|
DE_SOCKETFAMILY_LAST
|
|
} deSocketFamily;
|
|
|
|
typedef enum deSocketType_e
|
|
{
|
|
DE_SOCKETTYPE_STREAM = 0,
|
|
DE_SOCKETTYPE_DATAGRAM,
|
|
|
|
DE_SOCKETTYPE_LAST
|
|
} deSocketType;
|
|
|
|
typedef enum deSocketProtocol_e
|
|
{
|
|
DE_SOCKETPROTOCOL_TCP = 0,
|
|
DE_SOCKETPROTOCOL_UDP,
|
|
|
|
DE_SOCKETPROTOCOL_LAST
|
|
} deSocketProtocol;
|
|
|
|
typedef enum deSocketFlag_e
|
|
{
|
|
DE_SOCKET_KEEPALIVE = (1<<0),
|
|
DE_SOCKET_NODELAY = (1<<1),
|
|
DE_SOCKET_NONBLOCKING = (1<<2),
|
|
DE_SOCKET_CLOSE_ON_EXEC = (1<<3)
|
|
} deSocketFlag;
|
|
|
|
/* \todo [2012-07-09 pyry] Separate closed bits for send and receive channels. */
|
|
|
|
typedef enum deSocketState_e
|
|
{
|
|
DE_SOCKETSTATE_CLOSED = 0,
|
|
DE_SOCKETSTATE_CONNECTED = 1,
|
|
DE_SOCKETSTATE_LISTENING = 2,
|
|
DE_SOCKETSTATE_DISCONNECTED = 3,
|
|
|
|
DE_SOCKETSTATE_LAST
|
|
} deSocketState;
|
|
|
|
typedef enum deSocketResult_e
|
|
{
|
|
DE_SOCKETRESULT_SUCCESS = 0,
|
|
DE_SOCKETRESULT_WOULD_BLOCK = 1,
|
|
DE_SOCKETRESULT_CONNECTION_CLOSED = 2,
|
|
DE_SOCKETRESULT_CONNECTION_TERMINATED = 3,
|
|
DE_SOCKETRESULT_ERROR = 4,
|
|
|
|
DE_SOCKETRESULT_LAST
|
|
} deSocketResult;
|
|
|
|
typedef enum deSocketChannel_e
|
|
{
|
|
DE_SOCKETCHANNEL_RECEIVE = (1<<0),
|
|
DE_SOCKETCHANNEL_SEND = (1<<1),
|
|
|
|
DE_SOCKETCHANNEL_BOTH = DE_SOCKETCHANNEL_RECEIVE|DE_SOCKETCHANNEL_SEND
|
|
} deSocketChannel;
|
|
|
|
/* Socket API, similar to Berkeley sockets. */
|
|
|
|
deSocketAddress* deSocketAddress_create (void);
|
|
void deSocketAddress_destroy (deSocketAddress* address);
|
|
|
|
deBool deSocketAddress_setFamily (deSocketAddress* address, deSocketFamily family);
|
|
deSocketFamily deSocketAddress_getFamily (const deSocketAddress* address);
|
|
deBool deSocketAddress_setType (deSocketAddress* address, deSocketType type);
|
|
deSocketType deSocketAddress_getType (const deSocketAddress* address);
|
|
deBool deSocketAddress_setProtocol (deSocketAddress* address, deSocketProtocol protocol);
|
|
deSocketProtocol deSocketAddress_getProtocol (const deSocketAddress* address);
|
|
deBool deSocketAddress_setPort (deSocketAddress* address, int port);
|
|
int deSocketAddress_getPort (const deSocketAddress* address);
|
|
deBool deSocketAddress_setHost (deSocketAddress* address, const char* host);
|
|
const char* deSocketAddress_getHost (const deSocketAddress* address);
|
|
|
|
deSocket* deSocket_create (void);
|
|
void deSocket_destroy (deSocket* socket);
|
|
|
|
deSocketState deSocket_getState (const deSocket* socket);
|
|
deUint32 deSocket_getOpenChannels (const deSocket* socket);
|
|
|
|
deBool deSocket_setFlags (deSocket* socket, deUint32 flags);
|
|
|
|
deBool deSocket_listen (deSocket* socket, const deSocketAddress* address);
|
|
deSocket* deSocket_accept (deSocket* socket, deSocketAddress* clientAddress);
|
|
|
|
deBool deSocket_connect (deSocket* socket, const deSocketAddress* address);
|
|
|
|
deBool deSocket_shutdown (deSocket* socket, deUint32 channels);
|
|
deBool deSocket_close (deSocket* socket);
|
|
|
|
deSocketResult deSocket_send (deSocket* socket, const void* buf, size_t bufSize, size_t* numSent);
|
|
deSocketResult deSocket_receive (deSocket* socket, void* buf, size_t bufSize, size_t* numReceived);
|
|
|
|
/* Utilities. */
|
|
|
|
const char* deGetSocketFamilyName (deSocketFamily family);
|
|
const char* deGetSocketResultName (deSocketResult result);
|
|
|
|
DE_END_EXTERN_C
|
|
|
|
#endif /* _DESOCKET_H */
|