103 lines
2.6 KiB
C
103 lines
2.6 KiB
C
|
|
#ifndef CGE_NET_H
|
||
|
|
#define CGE_NET_H
|
||
|
|
|
||
|
|
#include <stdint.h>
|
||
|
|
#include <stddef.h>
|
||
|
|
|
||
|
|
enum CgeNetCode {
|
||
|
|
CGE_NET_EOK,
|
||
|
|
CGE_NET_EUNKNOWN,
|
||
|
|
CGE_NET_EINVAL,
|
||
|
|
CGE_NET_ENOMEM,
|
||
|
|
CGE_NET_EADDRINUSE,
|
||
|
|
CGE_NET_EADDRNOTAVAIL,
|
||
|
|
CGE_NET_ECONNREFUSED,
|
||
|
|
CGE_NET_ECONNRESET,
|
||
|
|
CGE_NET_ECONNABORTED,
|
||
|
|
CGE_NET_ENETUNREACH,
|
||
|
|
CGE_NET_EHOSTUNREACH,
|
||
|
|
CGE_NET_ETIMEDOUT,
|
||
|
|
CGE_NET_EWOULDBLOCK,
|
||
|
|
CGE_NET_EDISCONNECT,
|
||
|
|
};
|
||
|
|
|
||
|
|
enum CgeNetDomain {
|
||
|
|
CGE_NET_IPV4,
|
||
|
|
CGE_NET_IPV6
|
||
|
|
};
|
||
|
|
|
||
|
|
enum CgeNetType {
|
||
|
|
CGE_NET_TCP,
|
||
|
|
CGE_NET_UDP,
|
||
|
|
};
|
||
|
|
|
||
|
|
enum CgeNetEvent {
|
||
|
|
CGE_NET_READABLE = (1 << 0),
|
||
|
|
CGE_NET_WRITABLE = (1 << 1),
|
||
|
|
};
|
||
|
|
|
||
|
|
struct CgeNetIPv4 {
|
||
|
|
int type;
|
||
|
|
uint8_t addr[4];
|
||
|
|
uint16_t port;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct CgeNetIPv6 {
|
||
|
|
int type;
|
||
|
|
uint8_t addr[16];
|
||
|
|
uint16_t port;
|
||
|
|
};
|
||
|
|
|
||
|
|
typedef union CgeNetAddr {
|
||
|
|
int type;
|
||
|
|
struct CgeNetIPv4 ipv4;
|
||
|
|
struct CgeNetIPv6 ipv6;
|
||
|
|
} CgeNetAddr;
|
||
|
|
|
||
|
|
typedef struct CgeNetSocket CgeNetSocket;
|
||
|
|
typedef struct CgeNetPoll CgeNetPoll;
|
||
|
|
typedef void (*CgeNetCallback)(CgeNetSocket *, int event);
|
||
|
|
|
||
|
|
|
||
|
|
int CgeNetAddrFromStr(const char *str, uint16_t port, CgeNetAddr *addr);
|
||
|
|
|
||
|
|
int CgeNetInit(void);
|
||
|
|
void CgeNetCleanup(void);
|
||
|
|
|
||
|
|
CgeNetSocket *CgeNetOpen(int domain, int type, int *result);
|
||
|
|
void CgeNetClose(CgeNetSocket *socket);
|
||
|
|
int CgeNetErrorCode(CgeNetSocket *socket);
|
||
|
|
int CgeNetFetchError(CgeNetSocket *socket);
|
||
|
|
|
||
|
|
int CgeNetSetBlocking(CgeNetSocket *socket, int value);
|
||
|
|
int CgeNetBind(CgeNetSocket *socket, const CgeNetAddr *addr);
|
||
|
|
int CgeNetListen(CgeNetSocket *socket, unsigned int backlog);
|
||
|
|
|
||
|
|
CgeNetSocket *CgeNetAccept(CgeNetSocket *socket, CgeNetAddr *addr);
|
||
|
|
int CgeNetConnect(CgeNetSocket *socket, const CgeNetAddr *addr);
|
||
|
|
|
||
|
|
int CgeNetWrite(CgeNetSocket *socket, const void *buffer, size_t size,
|
||
|
|
size_t *actual);
|
||
|
|
int CgeNetRead(CgeNetSocket *socket, void *buffer, size_t size,
|
||
|
|
size_t *actual);
|
||
|
|
int CgeNetPeek(CgeNetSocket *socket, void *buffer, size_t size, size_t *actual);
|
||
|
|
|
||
|
|
int CgeNetWriteTo(CgeNetSocket *socket, const CgeNetAddr *addr,
|
||
|
|
const void *buffer, size_t size, size_t *actual);
|
||
|
|
int CgeNetReadFrom(CgeNetSocket *socket, CgeNetAddr* addr, void *buffer,
|
||
|
|
size_t size, size_t *actual);
|
||
|
|
void *CgeNetContext(CgeNetSocket *socket);
|
||
|
|
void CgeNetSetContext(CgeNetSocket *socket, void *data);
|
||
|
|
|
||
|
|
|
||
|
|
CgeNetPoll *CgeNetPollCreate(int *result);
|
||
|
|
int CgeNetPollErrorCode(CgeNetPoll *poll);
|
||
|
|
void CgeNetPollFree(CgeNetPoll* poll);
|
||
|
|
|
||
|
|
int CgeNetPollAdd(CgeNetPoll *poll, CgeNetSocket *socket,
|
||
|
|
CgeNetCallback callback, int events);
|
||
|
|
int CgeNetPollRemove(CgeNetPoll *poll, CgeNetSocket *socket);
|
||
|
|
int CgeNetPollWait(CgeNetPoll *poll, int timeout);
|
||
|
|
|
||
|
|
#endif /* CGE_NET_H */
|