#ifndef CGE_NET_H #define CGE_NET_H #include #include 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 */