Re: [PATCH/RFC 07/11] run-command: support input-fd
From: Erik Faye-Lund <hidden>
Date: 2016-06-15 22:47:51
On Fri, Nov 27, 2009 at 9:14 PM, Johannes Sixt [off-list ref] wrote:
On Freitag, 27. November 2009, Erik Faye-Lund wrote:quoted
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.
quoted
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".
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