From fd543247fd1004043ca748052115d96b22a39067 Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Thu, 9 Jan 2020 12:17:45 +0100 Subject: Read/write from both stdin/stdout and the sock Signed-off-by: Olivier Gayot --- netcat.ml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'netcat.ml') diff --git a/netcat.ml b/netcat.ml index 53c9521..5fcaa28 100644 --- a/netcat.ml +++ b/netcat.ml @@ -1,12 +1,22 @@ (** 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 + let aux input output = + let buffer = Bytes.create 256 in + let n = Unix.read input buffer 0 (Bytes.length buffer) in + match n with + | 0 -> () + | _ -> ignore (Unix.write output buffer 0 n); discuss csock + in + + match Unix.select [Unix.stdin; csock] [] [] (-1.) with + | (fds, _, _) -> ( + match List.hd fds == Unix.stdin with + | true -> aux Unix.stdin csock + | false -> aux csock Unix.stdout + ) 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 -- cgit v1.2.3