summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2020-01-09 12:17:45 +0100
committerOlivier Gayot <olivier.gayot@sigexec.com>2020-01-09 14:38:41 +0100
commit1973427f962122ab6dc251546f20393a2be33e5b (patch)
tree755df4955aecd3d7bcb578afe20de6d971487192
parent40f7bd6e1f0bc2926c8884b5ef55ac6fe40b22ed (diff)
First attempt
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
-rw-r--r--Makefile16
-rw-r--r--netcat.ml16
2 files changed, 32 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6af2f74
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,16 @@
+SRC = $(wildcard *.ml)
+OBJ = $(SRC:.ml=.cmo)
+PROG = prog
+
+
+all: $(PROG)
+
+
+$(PROG): $(OBJ)
+ ocamlc -o $@ unix.cma $^
+
+
+%.cmo: %.ml
+ ocamlc -o $@ -c $^
+
+.PHONY: all
diff --git a/netcat.ml b/netcat.ml
new file mode 100644
index 0000000..53c9521
--- /dev/null
+++ b/netcat.ml
@@ -0,0 +1,16 @@
+(** Connect to addr and port and start communicating **)
+let nc addr port =
+ let rec discuss csock =
+ let buffer = Bytes.create 5 in
+ let n = Unix.recv csock buffer 0 (Bytes.length buffer) [] in
+ match n with
+ | 0 -> ()
+ | _ -> ignore (Unix.write Unix.stdout buffer 0 n); discuss csock
+ in
+ let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
+ Unix.connect sock (Unix.ADDR_INET (Unix.inet_addr_of_string addr, port));
+ discuss sock
+
+let () = match Array.length Sys.argv with
+| 3 -> nc Sys.argv.(1) (int_of_string Sys.argv.(2))
+| _ -> raise (Failure "Usage error")