about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/net_tcp.rs59
-rw-r--r--src/libstd/std.rc1
2 files changed, 60 insertions, 0 deletions
diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs
new file mode 100644
index 00000000000..91ba225b770
--- /dev/null
+++ b/src/libstd/net_tcp.rs
@@ -0,0 +1,59 @@
+#[doc="
+High-level interface to libuv's TCP functionality
+"];
+
+#[cfg(ignore)]
+mod test {
+    #[test]
+    fn test_gl_tcp_ipv4_request() {
+        let ip = "127.0.0.1";
+        let port = 80u;
+        let expected_read_msg = "foo";
+        let actual_write_msg = "bar";
+        let addr = ipv4::address(ip, port);
+
+        let data_po = comm::port::<[u8]>();
+        let data_ch = comm::chan(data_po);
+        
+        alt connect(addr) {
+          tcp_connected(tcp_stream) {
+            let write_data = str::as_buf(actual_write_msg);
+            alt write(tcp_stream, [write_data]) {
+              tcp_write_success {
+                let mut total_read_data: [u8] = []
+                let reader_po = read_start(tcp_stream);
+                loop {
+                    alt comm::recv(reader_po) {
+                      new_read_data(data) {
+                        total_read_data += data;
+                        // theoretically, we could keep iterating, here, if
+                        // we expect the server on the other end to keep
+                        // streaming/chunking data to us, but..
+                        read_stop(tcp_stream);
+                        break;
+                      }
+                      done_reading {
+                        break;
+                      }
+                      error {
+                        fail "erroring occured during read attempt.. FIXME need info";
+                      }
+                    }
+                }
+                comm::send(data_ch, total_read_data);
+              }
+              tcp_write_error {
+                fail "error during write attempt.. FIXME need err info";
+              }
+            }
+          }
+          tcp_connect_error {
+            fail "error during connection attempt.. FIXME need err info..";
+          }
+        }
+
+        let actual_data = comm::recv(data_po);
+        let resp = str::from_bytes(actual_data);
+        log(debug, "DATA RECEIVED: "+resp);
+    }
+}
\ No newline at end of file
diff --git a/src/libstd/std.rc b/src/libstd/std.rc
index 40a03ae25c2..99011c5d649 100644
--- a/src/libstd/std.rc
+++ b/src/libstd/std.rc
@@ -23,6 +23,7 @@ export test, tempfile, serialization;
 // General io and system-services modules
 
 mod net;
+mod net_tcp;
 
 // libuv modules
 mod uv;