Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let read_descriptors l =
- let buffer_map =
- List.map
- (fun fd ->
- Unix.set_nonblock fd;
- fd,Buffer.create 32) l in
- let data = String.create 1024 in
- let append fd len =
- let chunk =
- String.sub data 0 len in
- let buf =
- List.assoc fd buffer_map in
- if Buffer.length buf + len < Sys.max_string_length then
- Buffer.add_string buf chunk
- in
- let rec read l =
- if l <> [] then
- let (rl,_,_) = Unix.select l [] [] 0.1 in
- let ready =
- List.fold_left
- (fun acc fd ->
- let n = Unix.read fd data 0 1024 in
- if n = 0 then
- begin
- Unix.close fd;
- fd::acc
- end
- else
- begin
- append fd n;
- acc
- end) [] rl
- in
- read (List.filter (fun fd -> not (List.mem fd ready)) l)
- else ()
- in read l;
- List.map
- (fun (_,b) -> Buffer.contents b) buffer_map
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement