diff options
| author | Olivier Gayot <olivier.gayot@sigexec.com> | 2020-01-09 12:17:45 +0100 | 
|---|---|---|
| committer | Olivier Gayot <olivier.gayot@sigexec.com> | 2020-01-09 14:38:41 +0100 | 
| commit | fd543247fd1004043ca748052115d96b22a39067 (patch) | |
| tree | e6c69e2ff933e4a0a6e5e1b5204b7abcc716e677 | |
| parent | 1973427f962122ab6dc251546f20393a2be33e5b (diff) | |
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
| -rw-r--r-- | netcat.ml | 20 | 
1 files changed, 15 insertions, 5 deletions
| @@ -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 | 
