Re: [PATCH/RFC 07/11] run-command: support input-fd
- From
Erik Faye-Lund <kusmabite@googlemail.com>
- Date
- Dec 8, 2009, 13:46 UTC
- Message-ID
- <40aa078e0912080546v544451c6yd3a3b15cb05a08ed@mail.gmail.com>
- In-Reply-To
- <200911272114.13107.j6t@kdbg.org>
On Fri, Nov 27, 2009 at 9:14 PM, Johannes Sixt <j6t@kdbg.org> wrote:
Show 20 quoted lines
> On Freitag, 27. November 2009, Erik Faye-Lund wrote:
>> What do you find confusing about it? The idea is to use a provided
>> bi-directional fd instead of a pipe if async->out is non-zero. The
>> currently defined rules for async is that async->out must be zero
>> (since the structure should be zero-initialized).
>
> It is just the code structure that is confusing. It should be
>
> if (async->out) {
> /* fd was provided */
> do all that is needed in this case
> } else {
> /* fd was requested */
> do all for this other case
> }
> /* nothing to do anymore here */
>
> (Of course, this should only replace the part that is cited above, not the
> whole function.)
>OK. I've reimplemented the change for the next round, taking this into account.
Show 7 quoted lines
>> Indeed it does. Do we want to extend it to support a set of >> unidirectional channels instead? > > Yes, I think so. We could pass a regular int fd[2] array around with the clear > definition that both can be closed independently, i.e. one must be a dup() of > the other. struct async would also have such an array. >
OK. This has been included for the next round. Instead of an array, I've tried to be consistent with start_command, and used two variables, "in" and "out".
Show 10 quoted lines
> Speaking of dup(): The underlying function is DuplicateHandle(), and its > documentation says: > > "You should not use DuplicateHandle to duplicate handles to the following > objects: ... o Sockets. ... use WSADuplicateSocket." > > But then the docs of WSADuplicateSocket() talk only about duplicating a socket > to a separate process. Perhaps DuplicateHandle() of a socket within the same > process Just Works? >
It seems the rest of the Windows-world depends on DuplicateHandle() working for sockets, so I'm not too worried. I can't find anything documentation(1) for _dup, and I don't think we have our own dup()-implementation.
(1) http://msdn.microsoft.com/en-us/library/8syseb29(VS.71).aspx
-- Erik "kusma" Faye-Lund