Skip to content
Snippets Groups Projects
Verified Commit 2aa7597a authored by jD91mZM2's avatar jD91mZM2
Browse files

Fix network problem with netdb on redox

parent 043ecf2c
No related branches found
No related tags found
No related merge requests found
......@@ -204,23 +204,25 @@ fn lookup_host(host: &str) -> Result<LookupHost, c_int> {
let packet_data_box = packet_data.into_boxed_slice();
let packet_data_ptr = Box::into_raw(packet_data_box) as *mut _ as *mut c_void;
let sock = unsafe { sys_socket::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP as i32) };
let mut dest = sockaddr_in {
let dest = sockaddr_in {
sin_family: AF_INET as u16,
sin_port: htons(53),
sin_addr: in_addr { s_addr: dns_addr },
..Default::default()
};
let dest_ptr = &dest as *const _ as *const sockaddr;
let dest_ptr = &mut dest as *mut _ as *mut sockaddr;
unsafe {
if sys_socket::sendto(sock, packet_data_ptr, packet_data_len, 0, dest_ptr, 16) < 0 {
let sock = unsafe {
let sock = sys_socket::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP as i32);
if sys_socket::connect(sock, dest_ptr, mem::size_of_val(&dest) as socklen_t) < 0 {
return Err(EIO);
}
if sys_socket::send(sock, packet_data_ptr, packet_data_len, 0) < 0 {
Box::from_raw(packet_data_ptr);
return Err(EIO);
}
}
sock
};
unsafe {
Box::from_raw(packet_data_ptr);
......@@ -232,12 +234,8 @@ fn lookup_host(host: &str) -> Result<LookupHost, c_int> {
let mut count = -1;
let mut from: sockaddr = Default::default();
let from_ptr = &mut from as *mut sockaddr;
unsafe {
count =
sys_socket::recvfrom(sock, buf_ptr, 65536, 0, from_ptr, &mut i as *mut socklen_t);
count = sys_socket::recv(sock, buf_ptr, 65536, 0);
}
if count < 0 {
return Err(EIO);
......@@ -321,9 +319,7 @@ fn lookup_addr(addr: in_addr) -> Result<Vec<Vec<u8>>, c_int> {
let packet_data_box = packet_data.into_boxed_slice();
let packet_data_ptr = Box::into_raw(packet_data_box) as *mut _ as *mut c_void;
let sock = unsafe { sys_socket::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP as i32) };
let mut dest = sockaddr_in {
let dest = sockaddr_in {
sin_family: AF_INET as u16,
sin_port: htons(53),
sin_addr: in_addr {
......@@ -332,10 +328,18 @@ fn lookup_addr(addr: in_addr) -> Result<Vec<Vec<u8>>, c_int> {
..Default::default()
};
let dest_ptr = &mut dest as *mut _ as *mut sockaddr;
let dest_ptr = &dest as *const _ as *const sockaddr;
let sock = unsafe {
let sock = sys_socket::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP as i32);
if sys_socket::connect(sock, dest_ptr, mem::size_of_val(&dest) as socklen_t) < 0 {
return Err(EIO);
}
sock
};
unsafe {
if sys_socket::sendto(sock, packet_data_ptr, packet_data_len, 0, dest_ptr, 16) < 0 {
if sys_socket::send(sock, packet_data_ptr, packet_data_len, 0) < 0 {
return Err(EIO);
}
}
......@@ -351,8 +355,7 @@ fn lookup_addr(addr: in_addr) -> Result<Vec<Vec<u8>>, c_int> {
let mut count = -1;
unsafe {
count =
sys_socket::recvfrom(sock, buf_ptr, 65536, 0, dest_ptr, &mut i as *mut socklen_t);
count = sys_socket::recv(sock, buf_ptr, 65536, 0);
}
if count < 0 {
return Err(EIO);
......
......@@ -36,16 +36,12 @@ macro_rules! bind_or_connect {
return -1;
}
let data = &*($address as *const sockaddr_in);
let addr = data.sin_addr.s_addr;
let port = in_port_t::from_be(data.sin_port);
let path = format!(
bind_or_connect!($mode "{}.{}.{}.{}:{}"),
addr >> 8 * 3,
addr >> 8 * 2 & 0xFF,
addr >> 8 & 0xFF,
addr & 0xFF,
port
let addr = slice::from_raw_parts(
&data.sin_addr.s_addr as *const _ as *const u8,
mem::size_of_val(&data.sin_addr.s_addr)
);
let port = in_port_t::from_be(data.sin_port);
let path = format!(bind_or_connect!($mode "{}.{}.{}.{}:{}"), addr[0], addr[1], addr[2], addr[3], port);
// Duplicate the socket, and then duplicate the copy back to the original fd
let fd = e(syscall::dup($socket as usize, path.as_bytes()));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment