Part of twisted.internet.process View Source View In Hierarchy
(Internal) Helper class to write into a Process's input pipe.
I am a helper which describes a selectable asynchronous writer to a process's input pipe, including stdin.Instance Variables | enableReadHack | A flag which determines how readability on this write descriptor will be
handled. If True , then readability may indicate the reader
for this write descriptor has been closed (ie, the connection has been
lost). If False , then readability events are ignored.
|
Method | __init__ | Initialize, specifying a Process instance to connect to. |
Method | fileno | Return the fileno() of my process's stdin. |
Method | writeSomeData | Write some data to the open process. |
Method | write | Reliably write some data. |
Method | doRead | The only way a write pipe can become "readable" is at EOF, because the child has closed it, and we're using a reactor which doesn't distinguish between readable and closed (such as the select reactor). |
Method | connectionLost | See abstract.FileDescriptor.connectionLost. |
Inherited from FileDescriptor:
Method | logPrefix | Returns the default log prefix |
Method | doWrite | Called when data can be written. |
Method | writeConnectionLost | Indicates write connection was lost. |
Method | readConnectionLost | Indicates read connection was lost. |
Method | writeSequence | Reliably write a sequence of data. |
Method | loseConnection | Close the connection at the next available opportunity. |
Method | loseWriteConnection | Undocumented |
Method | stopReading | Stop waiting for read availability. |
Method | stopWriting | Stop waiting for write availability. |
Method | startReading | Start waiting for read availability. |
Method | startWriting | Start waiting for write availability. |
Method | stopConsuming | Stop consuming data. |
Method | resumeProducing | Undocumented |
Method | pauseProducing | Undocumented |
Method | stopProducing | Stop producing data. |
Method | _postLoseConnection | Called after a loseConnection(), when all data has been written. |
Method | _closeWriteConnection | Undocumented |
Inherited from _ConsumerMixin (via FileDescriptor):
Method | registerProducer | Register to receive data from a producer. |
Method | unregisterProducer | Stop consuming data from a producer, without disconnecting. |
Reliably write some data.
The data is buffered until the underlying file descriptor is ready for writing. If there is more thanself.bufferSize
data in the
buffer and this descriptor has a registered streaming producer, its
pauseProducing()
method will be called.
The only way a write pipe can become "readable" is at EOF, because the child has closed it, and we're using a reactor which doesn't distinguish between readable and closed (such as the select reactor).
Except that's not true on linux < 2.6.11. It has the following characteristics: write pipe is completely empty => POLLOUT (writable in select), write pipe is not completely empty => POLLIN (readable in select), write pipe's reader closed => POLLIN|POLLERR (readable and writable in select)
That's what this funky code is for. If linux was not broken, this function could be simply "return CONNECTION_LOST".
BUG: We call select no matter what the reactor. If the reactor is pollreactor, and the fd is > 1024, this will fail. (only occurs on broken versions of linux, though).