diff --git a/src/header/sys_socket/mod.rs b/src/header/sys_socket/mod.rs index f70fa3210f..522ce2b7e2 100644 --- a/src/header/sys_socket/mod.rs +++ b/src/header/sys_socket/mod.rs @@ -167,6 +167,11 @@ pub unsafe extern "C" fn recvfrom( ) } +#[no_mangle] +pub unsafe extern "C" fn recvmsg(socket: c_int, msg: *mut msghdr, flags: c_int) -> ssize_t { + Sys::recvmsg(socket, msg, flags) +} + #[no_mangle] pub unsafe extern "C" fn send( socket: c_int, diff --git a/src/platform/linux/socket.rs b/src/platform/linux/socket.rs index 6377000f50..ca9532f9ee 100644 --- a/src/platform/linux/socket.rs +++ b/src/platform/linux/socket.rs @@ -75,6 +75,10 @@ impl PalSocket for Sys { )) as ssize_t } + unsafe fn recvmsg(socket: c_int, msg: *mut msghdr, flags: c_int) -> ssize_t { + e(syscall!(RECVMSG, socket, msg, flags)) as ssize_t + } + unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t { e(syscall!(SENDMSG, socket, msg, flags)) as ssize_t } diff --git a/src/platform/pal/socket.rs b/src/platform/pal/socket.rs index cea4eb5821..737f372150 100644 --- a/src/platform/pal/socket.rs +++ b/src/platform/pal/socket.rs @@ -39,6 +39,8 @@ pub trait PalSocket: Pal { address_len: *mut socklen_t, ) -> ssize_t; + unsafe fn recvmsg(socket: c_int, msg: *mut msghdr, flags: c_int) -> ssize_t; + unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t; unsafe fn sendto( diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs index 5fed801cab..fd5c460ced 100644 --- a/src/platform/redox/socket.rs +++ b/src/platform/redox/socket.rs @@ -316,7 +316,15 @@ impl PalSocket for Sys { } } + unsafe fn recvmsg(socket: c_int, msg: *mut msghdr, flags: c_int) -> ssize_t { + //TODO: implement recvfrom with recvmsg + eprintln!("recvmsg not implemented on redox"); + errno = syscall::ENOSYS; + return -1; + } + unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t { + //TODO: implement sendto with sendmsg eprintln!("sendmsg not implemented on redox"); errno = syscall::ENOSYS; return -1;