浏览代码

Fix examples.

whitequark 8 年之前
父节点
当前提交
5323f8833a
共有 3 个文件被更改,包括 21 次插入17 次删除
  1. 3 1
      README.md
  2. 17 15
      examples/smoltcpserver.rs
  3. 1 1
      src/socket/tcp.rs

+ 3 - 1
README.md

@@ -105,9 +105,11 @@ cargo run --example smoltcpserver -- tap0
 
 
 It responds to:
 It responds to:
 
 
-  * pings (`ping 192.168.69.1`),
+  * pings (`ping 192.168.69.1`);
   * UDP packets on port 6969 (`socat stdio udp4-connect:192.168.69.1:6969 <<<"abcdefg"`),
   * UDP packets on port 6969 (`socat stdio udp4-connect:192.168.69.1:6969 <<<"abcdefg"`),
+    where it will respond "yo dawg" to any incoming packet;
   * TCP packets on port 6969 (`socat stdio tcp4-connect:192.168.69.1:6969 <<<"abcdefg"`),
   * TCP packets on port 6969 (`socat stdio tcp4-connect:192.168.69.1:6969 <<<"abcdefg"`),
+    where it will respond with reversed chunks of the input indefinitely.
 
 
 The buffers are only 64 bytes long, for convenience of testing resource exhaustion conditions.
 The buffers are only 64 bytes long, for convenience of testing resource exhaustion conditions.
 
 

+ 17 - 15
examples/smoltcpserver.rs

@@ -57,7 +57,7 @@ fn main() {
     let tcp_rx_buffer = TcpSocketBuffer::new(vec![0; 64]);
     let tcp_rx_buffer = TcpSocketBuffer::new(vec![0; 64]);
     let tcp_tx_buffer = TcpSocketBuffer::new(vec![0; 128]);
     let tcp_tx_buffer = TcpSocketBuffer::new(vec![0; 128]);
     let mut tcp_socket = TcpSocket::new(tcp_rx_buffer, tcp_tx_buffer);
     let mut tcp_socket = TcpSocket::new(tcp_rx_buffer, tcp_tx_buffer);
-    (tcp_socket.as_socket() : &mut TcpSocket).listen(endpoint);
+    (tcp_socket.as_socket() : &mut TcpSocket).listen(endpoint).unwrap();
 
 
     let hardware_addr = EthernetAddress([0x02, 0x00, 0x00, 0x00, 0x00, 0x01]);
     let hardware_addr = EthernetAddress([0x02, 0x00, 0x00, 0x00, 0x00, 0x01]);
     let protocol_addrs = [IpAddress::v4(192, 168, 69, 1)];
     let protocol_addrs = [IpAddress::v4(192, 168, 69, 1)];
@@ -97,21 +97,23 @@ fn main() {
 
 
         {
         {
             let socket: &mut TcpSocket = iface.sockets()[1].as_socket();
             let socket: &mut TcpSocket = iface.sockets()[1].as_socket();
-            let data = {
-                let mut data = socket.recv(128).to_owned();
-                if data.len() > 0 {
-                    debug!("tcp recv data: {:?}",
-                           str::from_utf8(data.as_ref()).unwrap());
-                    data = data.split(|&b| b == b'\n').next().unwrap().to_owned();
-                    data.reverse();
-                    data.extend(b"\n");
+            if socket.can_recv() {
+                let data = {
+                    let mut data = socket.recv(128).unwrap().to_owned();
+                    if data.len() > 0 {
+                        debug!("tcp recv data: {:?}",
+                               str::from_utf8(data.as_ref()).unwrap_or("(invalid utf8)"));
+                        data = data.split(|&b| b == b'\n').collect::<Vec<_>>().concat();
+                        data.reverse();
+                        data.extend(b"\n");
+                    }
+                    data
+                };
+                if socket.can_send() && data.len() > 0 {
+                    debug!("tcp send data: {:?}",
+                           str::from_utf8(data.as_ref()).unwrap_or("(invalid utf8)"));
+                    socket.send_slice(&data[..]).unwrap();
                 }
                 }
-                data
-            };
-            if data.len() > 0 {
-                debug!("tcp send data: {:?}",
-                       str::from_utf8(data.as_ref()).unwrap());
-                socket.send_slice(&data[..]);
             }
             }
         }
         }
     }
     }

+ 1 - 1
src/socket/tcp.rs

@@ -1112,7 +1112,7 @@ mod test {
     #[test]
     #[test]
     fn test_listen() {
     fn test_listen() {
         let mut s = socket();
         let mut s = socket();
-        s.listen(IpEndpoint::new(IpAddress::default(), LOCAL_PORT));
+        s.listen(IpEndpoint::new(IpAddress::default(), LOCAL_PORT)).unwrap();
         assert_eq!(s.state, State::Listen);
         assert_eq!(s.state, State::Listen);
     }
     }