This looks like the kind of thing that could involve using Deferred as part of solution. Instead of callLater(0.8,doWrite), design the mechanism to wire up event-source to fire the deferred and make doWrite be the callback. On Oct 20, 2012, at 8:29:10AM, gelin yan wrote:
> Hi All > > A few months ago, I reported a bug about IOCP. Last night I spent several > hours on its implementation and finally found out a possible solution for > that. > > when sending some small chunks data continuously, the buffer will pile them > up and send to IOCP; however there is a SEND_LIMIT (128K) that means only > 128K will be handled. Now the problem is when we try to trigger the next > writing, IOCP will raise ERROR_IO_PENDING immediately and then connection > Lost. > > So I got a idea: if the size of data is larger than SEND_LIMIT, we can wait > a little bit time for the next writing instead of do it immediately. > > in twisted\internet\iocpreactor\abstract.py there is a method > > def _cbWrite(self, rc, bytes, evt): > if self._handleWrite(rc, bytes, evt): > self.doWrite() > > now I modified a bit, > > def _cbWrite(self, rc, bytes, evt): > if self._handleWrite(rc, bytes, evt): > if len(evt.buff) < self.SEND_LIMIT: > self.doWrite() > else: > self.reactor.callLater(0.8,self.doWrite) > > > > 0.8 is a silly trial but I have no idea what is the right number for this > place. After this modification, previous problematic scripts can pass. > > Maybe the better solution is to find a way to poll the complete port status > when read/write will be recovered from IO PENDING. Simply wait a little is > risky. > > Regards > > gelin yan > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python