diff --git a/src/runtime2/stdlib/internet.rs b/src/runtime2/stdlib/internet.rs index 94a37c19530842200f7cc6a7c7119372c035fd01..bb418c8ffb046d5ff9546bc8164832d58bdf2cae 100644 --- a/src/runtime2/stdlib/internet.rs +++ b/src/runtime2/stdlib/internet.rs @@ -49,13 +49,13 @@ impl SocketTcpClient { }) } - pub fn send(&self, message: &[u8]) -> Result { + pub fn send(&self, message: &[u8]) -> Result { let result = unsafe{ let message_pointer = message.as_ptr().cast(); libc::send(self.socket_handle, message_pointer, message.len() as libc::size_t, 0) }; if result < 0 { - return Err(()) + return Err(IoError::last_os_error()); } return Ok(result as usize); @@ -64,15 +64,6 @@ impl SocketTcpClient { /// Receives data from the TCP socket. Returns the number of bytes received. /// More bytes may be present even thought `used < buffer.len()`. pub fn receive(&self, buffer: &mut [u8]) -> Result { - if self.is_blocking { - return self.receive_blocking(buffer); - } else { - return self.receive_nonblocking(buffer); - } - } - - #[inline] - fn receive_blocking(&self, buffer: &mut [u8]) -> Result { let result = unsafe { let message_pointer = buffer.as_mut_ptr().cast(); libc::recv(self.socket_handle, message_pointer, buffer.len(), 0) @@ -83,37 +74,6 @@ impl SocketTcpClient { return Ok(result as usize); } - - #[inline] - fn receive_nonblocking(&self, buffer: &mut [u8]) -> Result { - unsafe { - let mut message_pointer = buffer.as_mut_ptr().cast(); - let mut remaining = buffer.len(); - - loop { - // Receive more data - let result = libc::recv(self.socket_handle, message_pointer, remaining, 0); - if result < 0 { - // Check reason - let os_error = IoError::last_os_error(); - if os_error.kind() == IoErrorKind::WouldBlock { - return Ok(buffer.len() - remaining); - } else { - return Err(os_error); - } - } - - // Modify pointer and remaining bytes - let received = result as usize; - message_pointer = message_pointer.add(received); - remaining -= received; - - if remaining == 0 { - return Ok(buffer.len()); - } - } - } - } } impl Drop for SocketTcpClient { @@ -355,22 +315,22 @@ mod tests { use std::net::*; use super::*; - #[test] - fn test_inet_thingo() { - const SIZE: usize = 1024; - - let s = SocketTcpClient::new(IpAddr::V4(Ipv4Addr::new(142, 250, 179, 163)), 80).expect("connect"); - s.send(b"GET / HTTP/1.1\r\n\r\n").expect("sending"); - let mut total = Vec::::new(); - let mut buffer = [0; SIZE]; - let mut received = SIZE; - - while received > 0 { - received = s.receive(&mut buffer).expect("receiving"); - println!("DEBUG: Received {} bytes", received); - total.extend_from_slice(&buffer[..received]); - } - let as_str = String::from_utf8_lossy(total.as_slice()); - println!("Yay! Got {} bytes:\n{}", as_str.len(), as_str); - } + // #[test] @nocommit Remove this + // fn test_inet_thingo() { + // const SIZE: usize = 1024; + // + // let s = SocketTcpClient::new(IpAddr::V4(Ipv4Addr::new(142, 250, 179, 163)), 80).expect("connect"); + // s.send(b"GET / HTTP/1.1\r\n\r\n").expect("sending"); + // let mut total = Vec::::new(); + // let mut buffer = [0; SIZE]; + // let mut received = SIZE; + // + // while received > 0 { + // received = s.receive(&mut buffer).expect("receiving"); + // println!("DEBUG: Received {} bytes", received); + // total.extend_from_slice(&buffer[..received]); + // } + // let as_str = String::from_utf8_lossy(total.as_slice()); + // println!("Yay! Got {} bytes:\n{}", as_str.len(), as_str); + // } } \ No newline at end of file