asynchat - operation could not complete w/ blocking
Erik Max Francis
max at alcyone.com
Wed Mar 8 03:04:34 EST 2006
Andreas R. wrote:
> The problem I was having with push, is that is does not always send
> complete packages.
>
> The solution to this was to use sendall() instead, but sendall() gives
> blocking error messages.
The purpose of asynchat's push methods is to queue outgoing data and
send it when possible. When you're complaining that it does not always
send complete packages, that strongly implies to me that you're
misunderstanding how socket transmissions work.
With TCP you're guaranteed that data will show up in the same order you
sent it. You're not at all guaranteed that it will show up in the same
chunks, or that you will get it all at the same time.
The only time you'd want to do use something like "sendall" is when you
really _do_ want to block until you make sure all the data is sent. So
if you're wondering why it blocks, that suggests a deep misunderstanding
in how TCP works.
If you want to use asynchat to transmit data, all you need to do is set
things up so that push handles them. Once that's the case, the data
will be transmitted when the socket is writable such that it doesn't
block. In other words, all you want to do is call
push/push_with_producer and leave it at that.
--
Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
Eppur, si muove! [But still it moves!]
-- Galileo Galilei
More information about the Python-list
mailing list