initial setup for recvmsg, all handlers return EOPNOTSUPP for now

This commit is contained in:
Benton60
2026-03-18 21:00:10 -04:00
parent 9f94592834
commit c9653b50eb
5 changed files with 39 additions and 1 deletions
+4
View File
@@ -281,6 +281,10 @@ impl<'a> SchemeSocket for IcmpSocket<'a> {
}
}
fn handle_recvmsg(&mut self, file: &mut SchemeFile<Self>, how:&mut [u8], flags:usize) -> SyscallResult<usize> {
return Err(SyscallError::new(syscall::EOPNOTSUPP));
}
fn handle_get_peer_name(
&self,
file: &SchemeFile<Self>,
+4
View File
@@ -149,6 +149,10 @@ impl<'a> SchemeSocket for RawSocket<'a> {
Ok(i)
}
fn handle_recvmsg(&mut self, file: &mut SchemeFile<Self>, how:&mut [u8], flags:usize) -> SyscallResult<usize> {
return Err(SyscallError::new(syscall::EOPNOTSUPP));
}
fn handle_get_peer_name(
&self,
file: &SchemeFile<Self>,
+23 -1
View File
@@ -243,6 +243,13 @@ where
fn handle_shutdown(&mut self, file: &mut SchemeFile<Self>, how: usize) -> SyscallResult<usize>;
fn handle_recvmsg(
&mut self,
file: &mut SchemeFile<Self>,
payload: &mut [u8],
flags: usize,
) -> SyscallResult<usize>;
fn get_sock_opt(
&self,
file: &SchemeFile<Self>,
@@ -496,7 +503,6 @@ where
}
}
// SocketCall::SendMsg => self.handle_sendmsg(id, payload, ctx),
// SocketCall::RecvMsg => self.handle_recvmsg(id, payload),
// SocketCall::Unbind => self.handle_unbind(id),
// SocketCall::GetToken => self.handle_get_token(id, payload),
SocketCall::GetPeerName => {
@@ -514,6 +520,22 @@ where
SocketT::handle_get_peer_name(socket, file, payload)
}
SocketCall::RecvMsg => {
let flags = metadata[1] as usize;
let handle = self.handles.get_mut(&fd).ok_or_else(||SyscallError::new(syscall::EBADF))?;
match *handle {
Handle::File(ref mut file) => {
let mut socket_set = self.socket_set.borrow_mut();
let socket = socket_set.get_mut::<SocketT>(file.socket_handle());
SocketT::handle_recvmsg(socket, file, payload, flags)
}
Handle::Null(_) => Err(SyscallError::new(syscall::EINVAL)),
Handle::SchemeRoot => Err(SyscallError::new(syscall::EBADF)),
}
}
SocketCall::Shutdown => {
let how = metadata[1] as usize;
+4
View File
@@ -308,6 +308,10 @@ impl<'a> SchemeSocket for TcpSocket<'a> {
Ok(i)
}
fn handle_recvmsg(&mut self, file: &mut SchemeFile<Self>, how:&mut [u8], flags:usize) -> SyscallResult<usize> {
return Err(SyscallError::new(syscall::EOPNOTSUPP));
}
fn handle_get_peer_name(
&self,
file: &SchemeFile<Self>,
+4
View File
@@ -296,6 +296,10 @@ impl<'a> SchemeSocket for UdpSocket<'a> {
Ok(i)
}
fn handle_recvmsg(&mut self, file: &mut SchemeFile<Self>, how:&mut [u8], flags:usize) -> SyscallResult<usize> {
return Err(SyscallError::new(syscall::EOPNOTSUPP));
}
fn handle_get_peer_name(
&self,
file: &SchemeFile<Self>,