See response below.<br><br>
<div><span class="gmail_quote">On 7/11/05, <b class="gmail_sendername">Jp Calderone</b> <<a href="mailto:exarkun@divmod.com">exarkun@divmod.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On Mon, 11 Jul 2005 10:52:14 -0500, Justin Johnson <<a href="mailto:justinjohnson@gmail.com">justinjohnson@gmail.com
</a>> wrote:<br>>I am attempting to add spawnProcess to iocpreactor. In order to begin this<br>>task I've had to do a lot of reading on Windows network programming,<br>>specifically the various Windows I/O methods, to attempt to understand what
<br>>win32eventreactor and iocpreactor are doing, and also just increase my<br>>understanding of how reactors work in general. To understand the various<br>>Winsock 2 methods that both of these reactors rely upon, I read chapters 1-5
<br>>of Network Programming for Microsoft Windows[1].<br>> Before actually attempting to add spawnProcess, I would like to present how<br>>I think iocpreactor works and how I think I should add spawnProcess, and<br>
>hopefully be corrected or confirmed in my understanding. If I'm too vague<br>>there's a good chance it's because I don't understand it very well. Please<br>>feel free to point out things that you might think are obvious but aren't
<br>>sure I understand.<br>> How iocpreactor works<br>>---------------------------------<br>><br>> [snip]<br>><br>> How to add spawnProcess<br>>---------------------------------------<br>><br>> 1. Create the processes via Windows APIs and associate their
<br>> stdout/err with with the IOCP via CreateIoCompletionPort calls.<br>> 2. Close stdin.<br><br>Why close stdin? How will you write to the spawned process?</blockquote>
<div> </div>
<div>I see, so I won't close stdin and people can do that in their ProcessProtocol in connectionMade or something if they want.</div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">> 3. Notify the ProcessProtocol via protocol.makeConnection (not sure<br>> why, looking at win32eventreactor)
<br><br>makeConnection is the method that's actually part of IProtocol (even though ProcessProtocol doesn't implement IProtocol, it still adheres to its API in this regard). Generally, all it does is set the .transport attribute on the protocol instance and then call connectionMade. This might seem pointless in the case of processes, but since it maintains consistency with other kinds of transports, it is useful.
</blockquote>
<div> </div>
<div> So the Process class is the transport? In win32eventreactor, 3 threads are started that loop on reading stdout and stderr and writing data from the outQueue to stdin. It seems to me that I would not use these threads, but instead have each of these 3 file handles associated with the IOCP. Then the methods defined in
ops.py would be used to handle events on those handles, resulting in transport methods being called. These transport methods would be methods on the Process class, which would result in methods on a single instance of the ProcessProtocol being called. This single instance of the ProcessProtocol would be shared by all of the 3 file handles. Am I understanding correctly? Are write and loseConnection the only methods the Process would need to implement from ITransport?
</div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">> 4. Receive data from stdout/err via the completion port by calling<br>> GetQueuedCompletionStatus from within doIteration. Is this really possible?
<br>> ProcessProtocol's methods won't get called appropriately by letting the<br>> existing callbacks in ops.py make calls to the transport (e.g.<br>> connectionDone, readDone)?<br>><br>> Thanks for your help.
<br>>Justin<br>> [1] <a href="http://www.amazon.com/exec/obidos/ASIN/0735615799">http://www.amazon.com/exec/obidos/ASIN/0735615799</a><br>><br><br>Jp<br><br>_______________________________________________<br>Twisted-Python mailing list
<br><a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br><a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python">http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
</a><br></blockquote></div><br>