Select and epool actually aren't useful for fd's that are opened on regular
files. As I understand it, they always indicate those files are ready for
I/O. You may be able to get something working using io_setup and friends on
Linux: http://man7.org/linux/man-pages/man2/io_setup.2.html, but that would
not be cross-platform. I think select etc. do work for pipes, and the Go
stdlib doesn't have a way to implement timeouts on those currently. What
kind of files do you want to do this for?

On Tue, Jul 26, 2016 at 1:08 PM Sam Vilain <s...@parsable.com> wrote:

> On 7/24/16 12:49 PM, fabian.stae...@gmail.com wrote:
> > The idea is obvious: When the timeout is reached, fd is closed, which
> > interrupts the blocking syscall.Read(), which terminates the goroutine.
>
> I'm wondering how to do this safely for filehandles I don't want to
> close, for instance stdin or stdout.  It seems that reads and writes to
> filehandles can't be interrupted or canceled.  If you have a deadline
> there's no way to guarantee that you don't read or write anything after
> the deadline expires.  This seems odd given that the underlying select
> or epoll system calls are definitely capable of this behavior.
>
> Overall it seems like a gap that I can't do file IO operations via
> channels.  It means that I can't pass around io.Reader and io.Writer for
> temporary functions: they must always be read from a routine which will
> own them until they are closed.  Should I wrap my readers and writers in
> these goroutines, and require my callers deal in some kind of
> channel-based IO API that I invent?  I appreciate that the current API
> avoids an allocation and this can be important for many use cases, and a
> read channel would have to be chan []byte or something and this would do
> a lot more allocations, but doing so would at least make the behavior
> more consistent and controllable.  Maybe there could be a channel I
> could wait on which translates to the filehandle ready bits, which lets
> me know that I can make an read or a write which will operate without
> blocking?
>
> The answer I got when I asked this in the #general channel yesterday was
> that the reader needs to implement its own, independent timeout.  But
> the regular object returned by os.OpenFile doesn't, and I'm struggling
> to see what primitives this can be implemented with.
>
> Sam
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to