Lumenarium/src_v2/platform/linux/lumenarium_linux_network.h

96 lines
2.0 KiB
C

#ifndef LUMENARIUM_LINUX_NETWORK_H
#define LUMENARIUM_LINUX_NETWORK_H 1
Socket_Handle
os_socket_create(s32 domain, s32 type, s32 protocol)
{
Socket_Handle result = {};
OS_SOCKET_TYPE sock = socket(domain, type, protocol);
if (sock == -1) {
perror("Error: os_socket_create\n");
return result;
}
result = open_sockets_put(sock);
if (result.value == 0)
{
fprintf(stderr, "Error: os_socket_create = not enough room in open_sockets\n");
}
return result;
}
bool
os_socket_bind()
{
invalid_code_path;
return false;
}
bool
os_socket_connect()
{
invalid_code_path;
return false;
}
bool
os_socket_close(Socket_Handle handle)
{
OS_SOCKET_TYPE sock = open_sockets_get(handle);
close(sock);
return true;
}
Data
os_socket_recv()
{
invalid_code_path;
return (Data){};
}
s32
os_socket_set_listening()
{
invalid_code_path;
return 0;
}
s32
os_socket_send()
{
invalid_code_path;
return 0;
}
s32
os_socket_send_to(Socket_Handle handle, u32 addr, u32 port, Data data, s32 flags)
{
OS_SOCKET_TYPE sock = open_sockets_get(handle);
struct sockaddr_in dst = {
.sin_family = AF_INET,
.sin_port = hton_u16(port),
.sin_addr.s_addr = hton_u32(addr),
};
struct sockaddr* dst_ptr = (struct sockaddr*)&dst;
s32 len_sent = sendto(sock, data.base, data.size, flags, dst_ptr, sizeof(struct sockaddr_in));
if (len_sent == -1)
{
perror("Error: os_socket_send_to\n");
return 0;
}
return len_sent;
}
s32
os_socket_set_opt(Socket_Handle handle, int level, int option_name, u8* option_value, s32 option_len)
{
OS_SOCKET_TYPE sock = open_sockets_get(handle);
s32 err = setsockopt(sock, level, option_name, (void*)option_value, (socklen_t)option_len);
if (err) {
fprintf(stderr, "Error: setsockopt - %d\n\targs: %d %d %.*s\n", err, level, option_name, option_len, (char*)option_value);
}
return 0;
}
#endif // LUMENARIUM_LINUX_NETWORK_H