Version française
Home     About     Download     Resources     Contact us    
Browse thread
Select on channels (again)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Olivier Andrieu <oandrieu@n...>
Subject: Re: [Caml-list] Re: Select on channels (again)
 Nathaniel Gray [Monday 21 August 2006] :
 >
 > On 8/21/06, Jonathan Roewen <jonathan.roewen@gmail.com> wrote:
 > > Why can't you just use the unix file opening functions since you're
 > > using unix select? And if you need the ocaml in/out channels, convert
 > > the unix file descriptors to ocaml ones instead of the other way
 > > around. Seems simple enough to me.
 > 
 > It sounds simple but doesn't work.  If select tells you a file
 > descriptor doesn't have data waiting you can't be sure there isn't
 > still data in the corresponding channel's buffer.  See the thread that
 > I referenced for a good discussion of why this is annoying.  For one
 > thing, it makes it impossible to use Marshal.from_channel without
 > potentially blocking.

Indeed, Marshal.from_channel would block, but it's not the only way to
read a marshalled value: cf. Marshal.header_size and
Marshal.data_size. 

With these, you can read your marshalled value from file_descr into a
buffer in a non-blocking, select-compatible way and then use
Marshal.from_string. 

-- 
   Olivier