Skip to main content

forge_sys/
socket.rs

1use core::ffi::{c_char, c_void};
2
3#[repr(C)]
4#[derive(Debug, Clone, Copy)]
5pub struct Socket {
6    pub fd: i32,
7}
8
9#[repr(C)]
10#[derive(Debug, Clone, Copy)]
11pub struct SockAddrIn {
12    pub sin_len: u8,
13    pub sin_family: u8,
14    pub sin_port: u16,
15    pub sin_addr: [u8; 4],
16    pub sin_zero: [c_char; 8],
17}
18
19#[repr(C)]
20#[derive(Debug, Clone, Copy)]
21pub struct SockAddrIn6 {
22    pub sin_len: u8,
23    pub sin_family: i32,
24    pub sin_port: u16,
25    pub sin_addr: [u8; 4],
26    pub sin_zero: [c_char; 8],
27}
28
29unsafe extern "C" {
30    pub fn forge_socket_initDefault() -> bool;
31    pub fn forge_socket_init(pool: *mut c_void, pool_size: usize, allocator_pool_size: usize, concurrency_count: i32) -> bool;
32    pub fn forge_socket_deinit();
33
34    pub fn forge_socket_create(domain: i32, ttype: i32, protocol: i32) -> Socket;
35    pub fn forge_socket_destroy(socket: *mut Socket); // Can be called multiple times on the same socket
36
37    pub fn forge_socket_bind(socket: *const Socket, addr: *const SockAddrIn, addrlen: usize) -> i32;
38    pub fn forge_socket_connect(socket: *const Socket, addr: *const SockAddrIn, addrlen: usize) -> i32;
39    pub fn forge_socket_listen(socket: *const Socket, backlog: i32) -> i32;
40    pub fn forge_socket_accept(socket: *const Socket, addr: *mut SockAddrIn, addrlen: *mut usize) -> Socket;
41    pub fn forge_socket_shutdown(socket: *const Socket, how: i32) -> i32;
42
43    pub fn forge_socket_send(socket: *const Socket, buf: *const c_void, len: usize, flags: i32) -> isize;
44    pub fn forge_socket_recv(socket: *const Socket, buf: *mut c_void, len: usize, flags: i32) -> isize;
45
46    pub fn forge_socket_getSockOpt(socket: *const Socket, level: i32, name: i32, val: *mut c_void, len: *mut u32) -> i32;
47    pub fn forge_socket_setSockOpt(socket: *const Socket, level: i32, name: i32, val: *const c_void, len: u32) -> i32;
48}