enable getsockopt and setsockopt

This commit is contained in:
Jeremy Soller
2018-09-20 14:39:58 -07:00
parent 9dbf49fdcd
commit a567197b54
4 changed files with 111 additions and 59 deletions
+37 -21
View File
@@ -92,17 +92,25 @@ pub unsafe extern "C" fn getsockname(
)
}
// #[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 getsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *mut c_void,
option_len: *mut socklen_t,
) -> c_int {
trace_expr!(
Sys::getsockopt(socket, level, option_name, option_value, option_len),
"getsockopt({}, {}, {}, {:p}, {:p})",
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)
@@ -177,16 +185,24 @@ pub unsafe extern "C" fn sendto(
)
}
// #[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 setsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *const c_void,
option_len: socklen_t,
) -> c_int {
trace_expr!(
Sys::setsockopt(socket, level, option_name, option_value, option_len),
"setsockopt({}, {}, {}, {:p}, {})",
socket,
level,
option_name,
option_value,
option_len
)
}
// #[no_mangle]
// pub unsafe extern "C" fn shutdown(socket: c_int, how: c_int) -> c_int {
+38 -38
View File
@@ -4,48 +4,10 @@ use super::{e, Sys};
use header::sys_socket::{sockaddr, socklen_t};
impl Sys {
fn getsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *mut c_void,
option_len: *mut socklen_t,
) -> c_int {
e(unsafe {
syscall!(
GETSOCKOPT,
socket,
level,
option_name,
option_value,
option_len
)
}) as c_int
}
fn listen(socket: c_int, backlog: c_int) -> c_int {
e(unsafe { syscall!(LISTEN, socket, backlog) }) as c_int
}
fn setsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *const c_void,
option_len: socklen_t,
) -> c_int {
e(unsafe {
syscall!(
SETSOCKOPT,
socket,
level,
option_name,
option_value,
option_len
)
}) as c_int
}
fn shutdown(socket: c_int, how: c_int) -> c_int {
e(unsafe { syscall!(SHUTDOWN, socket, how) }) as c_int
}
@@ -84,6 +46,25 @@ impl PalSocket for Sys {
e(syscall!(GETSOCKNAME, socket, address, address_len)) as c_int
}
fn getsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *mut c_void,
option_len: *mut socklen_t,
) -> c_int {
e(unsafe {
syscall!(
GETSOCKOPT,
socket,
level,
option_name,
option_value,
option_len
)
}) as c_int
}
unsafe fn recvfrom(
socket: c_int,
buf: *mut c_void,
@@ -116,6 +97,25 @@ impl PalSocket for Sys {
)) as ssize_t
}
fn setsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *const c_void,
option_len: socklen_t,
) -> c_int {
e(unsafe {
syscall!(
SETSOCKOPT,
socket,
level,
option_name,
option_value,
option_len
)
}) as c_int
}
unsafe fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int {
e(syscall!(SOCKET, domain, kind, protocol)) as c_int
}
+16
View File
@@ -21,6 +21,14 @@ pub trait PalSocket: Pal {
address_len: *mut socklen_t,
) -> c_int;
fn getsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *mut c_void,
option_len: *mut socklen_t,
) -> c_int;
unsafe fn recvfrom(
socket: c_int,
buf: *mut c_void,
@@ -39,5 +47,13 @@ pub trait PalSocket: Pal {
dest_len: socklen_t,
) -> ssize_t;
fn setsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *const c_void,
option_len: socklen_t,
) -> c_int;
unsafe fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int;
}
+20
View File
@@ -134,6 +134,16 @@ impl PalSocket for Sys {
e(inner_get_name(true, socket, address, address_len)) as c_int
}
fn getsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *mut c_void,
option_len: *mut socklen_t,
) -> c_int {
e(Err(syscall::Error::new(syscall::ENOSYS))) as c_int
}
unsafe fn recvfrom(
socket: c_int,
buf: *mut c_void,
@@ -186,6 +196,16 @@ impl PalSocket for Sys {
}
}
fn setsockopt(
socket: c_int,
level: c_int,
option_name: c_int,
option_value: *const c_void,
option_len: socklen_t,
) -> c_int {
e(Err(syscall::Error::new(syscall::ENOSYS))) as c_int
}
unsafe fn socket(domain: c_int, mut kind: c_int, protocol: c_int) -> c_int {
if domain != AF_INET {
errno = syscall::EAFNOSUPPORT;