artifact_id;status_id;status_name;priority;submitter_id;submitter_name;assigned_to_id;assigned_to_name;open_date;close_date;last_modified_date;summary;details;"Hardware";"Product";"Operating System";"Component";"Version";"Severity";"Resolution";"URL"
269;1;"Open";3;274;"Guillaume Yziquel";144;"Christophe Troestler";"2009-08-15 15:56";"";"2012-02-04 18:54";"Socket.select is waiting too much.";"With the following code:

module Aux = struct

  let string_of_char_list l =
    String.concat """" (List.map (String.make 1) l)

end

let read_on_channel channel =
  let trying = ref true in
  let answer = ref [(let c = Socket.input_char channel in print_char c; flush stdout; c)] in
  while !trying do
    match begin match Socket.select [channel] [] 1. with
                | (x::[]), [] when x = channel -> Some (let c = Socket.input_char channel in print_char c; flush stdout; c)
                | [], [] -> None | _ -> (assert false); None end
    with | None -> trying := false
         | Some c -> answer := c::!answer
  done;
  Aux.string_of_char_list (List.rev !answer)

I get the following output:
# read_on_channel inch;;
<?xml version=""1.0"" encoding=""UTF-8""?>

But the thing is, each character gets written after one second. It seems that select is waiting as long as 1. second, and not notifiying the program as soon as possible.
";"HP";"None";"Linux";"None";"v1.0";"None";"Won't Fix";""