Large reorganization of headers (WIP)
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
sys_includes = ["stddef.h", "stdint.h", "sys/types.h"]
|
||||
include_guard = "_SYS_SOCKET_H"
|
||||
style = "Tag"
|
||||
language = "C"
|
||||
|
||||
[defines]
|
||||
"target_os=linux" = "__linux__"
|
||||
"target_os=redox" = "__redox__"
|
||||
|
||||
[enum]
|
||||
prefix_with_name = true
|
||||
@@ -0,0 +1,60 @@
|
||||
use platform::types::*;
|
||||
|
||||
// These constants also exist in platform. They need to match.
|
||||
// Reason they are not just re-exported is cbindgen.
|
||||
pub const SOCK_STREAM: c_int = 1;
|
||||
pub const SOCK_DGRAM: c_int = 2;
|
||||
pub const SOCK_NONBLOCK: c_int = 0o4000;
|
||||
pub const SOCK_CLOEXEC: c_int = 0o2000000;
|
||||
pub const AF_INET: c_int = 2;
|
||||
|
||||
// Other constants
|
||||
pub const SOCK_SEQPACKET: c_int = 5;
|
||||
|
||||
pub const SOL_SOCKET: c_int = 1;
|
||||
|
||||
pub const SO_DEBUG: c_int = 1;
|
||||
pub const SO_REUSEADDR: c_int = 2;
|
||||
pub const SO_TYPE: c_int = 3;
|
||||
pub const SO_ERROR: c_int = 4;
|
||||
pub const SO_DONTROUTE: c_int = 5;
|
||||
pub const SO_BROADCAST: c_int = 6;
|
||||
pub const SO_SNDBUF: c_int = 7;
|
||||
pub const SO_RCVBUF: c_int = 8;
|
||||
pub const SO_KEEPALIVE: c_int = 9;
|
||||
pub const SO_OOBINLINE: c_int = 10;
|
||||
pub const SO_NO_CHECK: c_int = 11;
|
||||
pub const SO_PRIORITY: c_int = 12;
|
||||
pub const SO_LINGER: c_int = 13;
|
||||
pub const SO_BSDCOMPAT: c_int = 14;
|
||||
pub const SO_REUSEPORT: c_int = 15;
|
||||
pub const SO_PASSCRED: c_int = 16;
|
||||
pub const SO_PEERCRED: c_int = 17;
|
||||
pub const SO_RCVLOWAT: c_int = 18;
|
||||
pub const SO_SNDLOWAT: c_int = 19;
|
||||
pub const SO_RCVTIMEO: c_int = 20;
|
||||
pub const SO_SNDTIMEO: c_int = 21;
|
||||
pub const SO_ACCEPTCONN: c_int = 30;
|
||||
pub const SO_PEERSEC: c_int = 31;
|
||||
pub const SO_SNDBUFFORCE: c_int = 32;
|
||||
pub const SO_RCVBUFFORCE: c_int = 33;
|
||||
pub const SO_PROTOCOL: c_int = 38;
|
||||
pub const SO_DOMAIN: c_int = 39;
|
||||
|
||||
pub const SOMAXCONN: c_int = 128;
|
||||
|
||||
pub const MSG_CTRUNC: c_int = 8;
|
||||
pub const MSG_DONTROUTE: c_int = 4;
|
||||
pub const MSG_EOR: c_int = 128;
|
||||
pub const MSG_OOB: c_int = 1;
|
||||
pub const MSG_PEEK: c_int = 2;
|
||||
pub const MSG_TRUNC: c_int = 32;
|
||||
pub const MSG_WAITALL: c_int = 256;
|
||||
|
||||
pub const AF_INET6: c_int = 10;
|
||||
pub const AF_UNIX: c_int = 1;
|
||||
pub const AF_UNSPEC: c_int = 0;
|
||||
|
||||
pub const SHUT_RD: c_int = 0;
|
||||
pub const SHUT_RDWR: c_int = 2;
|
||||
pub const SHUT_WR: c_int = 1;
|
||||
@@ -0,0 +1,198 @@
|
||||
//! socket implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html
|
||||
|
||||
use core::ptr;
|
||||
|
||||
use platform;
|
||||
use platform::{PalSocket, Sys};
|
||||
use platform::types::*;
|
||||
|
||||
mod constants;
|
||||
use constants::*;
|
||||
|
||||
pub type in_addr_t = [u8; 4];
|
||||
pub type in_port_t = u16;
|
||||
pub type sa_family_t = u16;
|
||||
pub type socklen_t = u32;
|
||||
|
||||
#[repr(C)]
|
||||
pub struct sockaddr {
|
||||
pub sa_family: sa_family_t,
|
||||
data: [c_char; 14],
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn accept(
|
||||
socket: c_int,
|
||||
address: *mut sockaddr,
|
||||
address_len: *mut socklen_t,
|
||||
) -> c_int {
|
||||
Sys::accept(
|
||||
socket,
|
||||
address as *mut platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn bind(
|
||||
socket: c_int,
|
||||
address: *const sockaddr,
|
||||
address_len: socklen_t,
|
||||
) -> c_int {
|
||||
Sys::bind(
|
||||
socket,
|
||||
address as *const platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn connect(
|
||||
socket: c_int,
|
||||
address: *const sockaddr,
|
||||
address_len: socklen_t,
|
||||
) -> c_int {
|
||||
Sys::connect(
|
||||
socket,
|
||||
address as *const platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn getpeername(
|
||||
socket: c_int,
|
||||
address: *mut sockaddr,
|
||||
address_len: *mut socklen_t,
|
||||
) -> c_int {
|
||||
Sys::getpeername(
|
||||
socket,
|
||||
address as *mut platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn getsockname(
|
||||
socket: c_int,
|
||||
address: *mut sockaddr,
|
||||
address_len: *mut socklen_t,
|
||||
) -> c_int {
|
||||
Sys::getsockname(
|
||||
socket,
|
||||
address as *mut platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn getsockopt(
|
||||
socket: c_int,
|
||||
level: c_int,
|
||||
option_name: c_int,
|
||||
option_value: *mut c_void,
|
||||
option_len: *mut socklen_t,
|
||||
) -> c_int {
|
||||
Sys::getsockopt(socket, level, option_name, option_value, option_len)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn listen(socket: c_int, backlog: c_int) -> c_int {
|
||||
Sys::listen(socket, backlog)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn recv(
|
||||
socket: c_int,
|
||||
buffer: *mut c_void,
|
||||
length: size_t,
|
||||
flags: c_int,
|
||||
) -> ssize_t {
|
||||
recvfrom(
|
||||
socket,
|
||||
buffer,
|
||||
length,
|
||||
flags,
|
||||
ptr::null_mut(),
|
||||
ptr::null_mut(),
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn recvfrom(
|
||||
socket: c_int,
|
||||
buffer: *mut c_void,
|
||||
length: size_t,
|
||||
flags: c_int,
|
||||
address: *mut sockaddr,
|
||||
address_len: *mut socklen_t,
|
||||
) -> ssize_t {
|
||||
Sys::recvfrom(
|
||||
socket,
|
||||
buffer,
|
||||
length,
|
||||
flags,
|
||||
address as *mut platform::types::sockaddr,
|
||||
address_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn send(
|
||||
socket: c_int,
|
||||
message: *const c_void,
|
||||
length: size_t,
|
||||
flags: c_int,
|
||||
) -> ssize_t {
|
||||
sendto(socket, message, length, flags, ptr::null(), 0)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn sendto(
|
||||
socket: c_int,
|
||||
message: *const c_void,
|
||||
length: size_t,
|
||||
flags: c_int,
|
||||
dest_addr: *const sockaddr,
|
||||
dest_len: socklen_t,
|
||||
) -> ssize_t {
|
||||
Sys::sendto(
|
||||
socket,
|
||||
message,
|
||||
length,
|
||||
flags,
|
||||
dest_addr as *const platform::types::sockaddr,
|
||||
dest_len,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn setsockopt(
|
||||
socket: c_int,
|
||||
level: c_int,
|
||||
option_name: c_int,
|
||||
option_value: *const c_void,
|
||||
option_len: socklen_t,
|
||||
) -> c_int {
|
||||
Sys::setsockopt(socket, level, option_name, option_value, option_len)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn shutdown(socket: c_int, how: c_int) -> c_int {
|
||||
Sys::shutdown(socket, how)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int {
|
||||
Sys::socket(domain, kind, protocol)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn socketpair(
|
||||
domain: c_int,
|
||||
kind: c_int,
|
||||
protocol: c_int,
|
||||
socket_vector: *mut c_int,
|
||||
) -> c_int {
|
||||
Sys::socketpair(domain, kind, protocol, socket_vector)
|
||||
}
|
||||
Reference in New Issue
Block a user