123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- #pragma once
- #include "Baselib_ErrorState.h"
- #include "Baselib_NetworkAddress.h"
- #include "Internal/Baselib_EnumSizeCheck.h"
- #ifdef __cplusplus
- BASELIB_C_INTERFACE
- {
- #endif
- typedef struct Baselib_Socket_Handle { intptr_t handle; } Baselib_Socket_Handle;
- static const Baselib_Socket_Handle Baselib_Socket_Handle_Invalid = { -1 };
- typedef enum Baselib_Socket_Protocol
- {
- Baselib_Socket_Protocol_UDP = 1,
- Baselib_Socket_Protocol_TCP = 2,
- } Baselib_Socket_Protocol;
- BASELIB_ENUM_ENSURE_ABI_COMPATIBILITY(Baselib_Socket_Protocol);
- typedef struct Baselib_Socket_Message
- {
- Baselib_NetworkAddress* address;
- void* data;
- uint32_t dataLen;
- } Baselib_Socket_Message;
- BASELIB_API Baselib_Socket_Handle Baselib_Socket_Create(
- Baselib_NetworkAddress_Family family,
- Baselib_Socket_Protocol protocol,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_Socket_Bind(
- Baselib_Socket_Handle socket,
- const Baselib_NetworkAddress* address,
- Baselib_NetworkAddress_AddressReuse addressReuse,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_Socket_TCP_Connect(
- Baselib_Socket_Handle socket,
- const Baselib_NetworkAddress* address,
- Baselib_NetworkAddress_AddressReuse addressReuse,
- Baselib_ErrorState* errorState
- );
- typedef enum Baselib_Socket_PollEvents
- {
- Baselib_Socket_PollEvents_Readable = 1,
- Baselib_Socket_PollEvents_Writable = 2,
-
- Baselib_Socket_PollEvents_Connected = 4,
- } Baselib_Socket_PollEvents;
- BASELIB_ENUM_ENSURE_ABI_COMPATIBILITY(Baselib_Socket_PollEvents);
- typedef struct Baselib_Socket_PollFd
- {
- Baselib_Socket_Handle handle;
- Baselib_Socket_PollEvents requestedEvents;
- Baselib_Socket_PollEvents resultEvents;
- Baselib_ErrorState* errorState;
- } Baselib_Socket_PollFd;
- static inline Baselib_Socket_PollFd Baselib_Socket_PollFd_New(Baselib_Socket_Handle handle, Baselib_Socket_PollEvents events, Baselib_ErrorState* errorState)
- {
- Baselib_Socket_PollFd result;
- result.handle = handle;
- result.requestedEvents = events;
- result.resultEvents = (Baselib_Socket_PollEvents)0;
- result.errorState = errorState;
- return result;
- }
- BASELIB_API void Baselib_Socket_Poll(
- Baselib_Socket_PollFd* sockets,
- uint32_t socketsCount,
- uint32_t timeoutInMilliseconds,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_Socket_GetAddress(
- Baselib_Socket_Handle socket,
- Baselib_NetworkAddress* address,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_Socket_TCP_Listen(
- Baselib_Socket_Handle socket,
- Baselib_ErrorState* errorState
- );
- BASELIB_API Baselib_Socket_Handle Baselib_Socket_TCP_Accept(
- Baselib_Socket_Handle socket,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint32_t Baselib_Socket_UDP_Send(
- Baselib_Socket_Handle socket,
- Baselib_Socket_Message messages[],
- uint32_t messagesCount,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint32_t Baselib_Socket_TCP_Send(
- Baselib_Socket_Handle socket,
- void* data,
- uint32_t dataLen,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint32_t Baselib_Socket_UDP_Recv(
- Baselib_Socket_Handle socket,
- Baselib_Socket_Message messages[],
- uint32_t messagesCount,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint32_t Baselib_Socket_TCP_Recv(
- Baselib_Socket_Handle socket,
- void* data,
- uint32_t dataLen,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_Socket_Close(
- Baselib_Socket_Handle socket
- );
- #ifdef __cplusplus
- }
- #endif
|