Chris Angelico <ros...@gmail.com>: > Indeed. That said, though, if your writes are all smaller than one > packet, and you perfectly alternate a write and a read, a write and a > read, at both ends, then you can go a very long way without ever > running into this.
Rare errors are worse than consistent errors. TCP streams are intercepted by address translators, load balancers, proxies, protocol translators and what not. They will eagerly take advantage of the fact that TCP is a full-duplex octet stream. Also, programs could be plugged into other types of octet stream with other stream chopping characteristics. Finally, the MTU size is very unpredictable. You have all kinds of encapsulation (6to4, VPN, VLAN, tunneling etc) that make it difficult to be sure about what's a "small" write. What's more, you should be on the lookout for partial writes not block until they finish. Typically, it is not enough to rely on TCP's flow control but also impose a separate application-level, end-to-end flow control to avoid deadlocks on the one hand and buffer overflows on the other hand. Marko -- https://mail.python.org/mailman/listinfo/python-list