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 |
|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).|
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||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||registerProducer||Register to receive data from a producer.|
|Method||unregisterProducer||Stop consuming data from a producer, without disconnecting.|
|Method||stopConsuming||Stop consuming data.|
|Method||stopProducing||Stop producing data.|
|Method||_postLoseConnection||Called after a loseConnection(), when all data has been written.|
Reliably write some data.The data is buffered until the underlying file descriptor is ready for writing. If there is more than
self.bufferSizedata 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).