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); 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}