smol-rs / async-process

Async interface for working with processes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`ChildStdin`, et cetera should implement `AsRawFd/AsRawHandle`

notgull opened this issue · comments

I was going to try to implement I/O safety types on the handles as per sunfishcode/io-lifetimes#38, but then I realized that ChildStdin, ChildStdout and ChildStderr don't implement AsRawFd at all.

I believe that this is due to the fact that Unblock is used to wrap the inner std type, which makes it difficult to access the methods of the inner type. I see three possible ways to resolve this:

  • On Windows, wrap ChildStd* in an Arc that is stored in the structure as well as the Unblock, so that methods on the inner type can be accessed more easily.
  • Make it easier to access the inner file descriptor for Unblock types. We could potentially implement AsRawHandle on Unblock<T: AsRawHandle> that panics if the inner type is not accessible, or maybe some kind of get_ref(&self) -> Option<&T> general purpose method.
  • Implement AsRawFd on unix, since it is easy to get the inner type via async_io::Async, but don't implement the corresponding types on Windows.

At this time, I tend to prefer the third (unix only). (Eventually, we probably need to implement them on windows, but there is no need to rush...)