cleanup: fix unreachable pattern warnings in TCP/UDP socket options

TCP and UDP get_sock_opt/set_sock_opt had duplicate match arms
due to constant collisions (Linux-level values share namespace):

  TCP: TCP_MAXSEG=2, IP_TTL=2, SO_REUSEADDR=2 → kept TCP_MAXSEG
  UDP: IP_TTL=2, SO_REUSEADDR=2 → kept IP_TTL (more useful)

Removed unreachable arms with explanatory comments. The
collision is inherent — Linux uses different option levels
(SOL_SOCKET vs IPPROTO_TCP vs IPPROTO_IP) but Redox scheme
has a flat namespace. Applications that use multi-level
getsockopt() would need richer level dispatching.
This commit is contained in:
Red Bear OS
2026-07-08 15:43:42 +03:00
parent 27f8e351e6
commit 5cfbe23b5c
2 changed files with 5 additions and 30 deletions
+3 -15
View File
@@ -517,13 +517,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> {
buf[..len].copy_from_slice(&name[..len]);
Ok(len)
}
IP_TTL => {
let val = self.hop_limit().unwrap_or(64) as u32;
let bytes = val.to_ne_bytes();
let len = buf.len().min(bytes.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
// IP_TTL(2) collides with TCP_MAXSEG(2) — TCP_MAXSEG handles it
IP_MTU_DISCOVER => {
let val: u32 = 1;
let bytes = val.to_ne_bytes();
@@ -531,13 +525,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> {
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
SO_REUSEADDR => {
let val: u32 = 1;
let bytes = val.to_ne_bytes();
let len = buf.len().min(bytes.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
// SO_REUSEADDR(2) collides with TCP_MAXSEG(2) — TCP_MAXSEG handles it
_ => Err(SyscallError::new(syscall::ENOPROTOOPT)),
}
}
@@ -590,7 +578,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> {
Ok(1)
}
IP_MTU_DISCOVER => Ok(1),
SO_REUSEADDR => Ok(1),
// SO_REUSEADDR(2) collides with IP_TTL(2) — IP_TTL handles it
_ => Err(SyscallError::new(syscall::ENOPROTOOPT)),
}
}
+2 -15
View File
@@ -436,20 +436,6 @@ impl<'a> SchemeSocket for UdpSocket<'a> {
buf[..bytes.len()].copy_from_slice(&bytes);
Ok(bytes.len())
}
SO_REUSEADDR => {
let val: u32 = 1;
let bytes = val.to_ne_bytes();
let len = buf.len().min(bytes.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
SO_BROADCAST => {
let val: u32 = 1;
let bytes = val.to_ne_bytes();
let len = buf.len().min(bytes.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
IP_TTL => {
let val = self.hop_limit().unwrap_or(64) as u32;
let bytes = val.to_ne_bytes();
@@ -457,6 +443,7 @@ impl<'a> SchemeSocket for UdpSocket<'a> {
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
// SO_REUSEADDR(2) collides with IP_TTL(2) — IP_TTL handles it
_ => Err(SyscallError::new(syscall::ENOPROTOOPT)),
}
}
@@ -473,7 +460,7 @@ impl<'a> SchemeSocket for UdpSocket<'a> {
self.set_hop_limit(Some(val));
Ok(1)
}
SO_REUSEADDR | SO_BROADCAST => Ok(1),
// SO_REUSEADDR(2) and SO_BROADCAST(6): accepted, no state change needed
_ => Err(SyscallError::new(syscall::ENOPROTOOPT)),
}
}