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