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:
@@ -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)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user