On 05:38 pm, peter.westl...@pobox.com wrote:
Here is some highly suspicious-looking output from strace:
sendto(5, "\0\4_ask\0\004867c\0\10_command\0\tLogOutpu"..., 343, 0,
NULL, 0) = 343 recvfrom(5,
"\0\7_answer\0\004867c\0\6status\0\4True\0\0", 65536, 0, NULL, NULL) =
31 sendto(5, "\0\4_ask\0\004867d\0\10_command\0\tLogOutpu"..., 183, 0,
NULL, 0) = 183 sendto(5, "\0\4_ask\0\004867e\0\10_command\0\4Ping\0\0",
30, 0, NULL, 0) = 30 recvfrom(5, 0x7fec3005c6d4, 65536, 0, 0, 0) = -1
EAGAIN (Resource temporarily unavailable) sendto(5,
"\0\4_ask\0\004867f\0\10_command\0\4Ping\0\0", 30, 0, NULL, 0) = 30
recvfrom(5, "\0\7_answer\0\004867f\0\3ack\0\4True\0\0", 65536, 0, NULL,
NULL) = 28
Requests 867d and 867e never receive their callbacks.
But in this trace, it looks like those two calls also never received a
response from the server - so it's correct that the callbacks never
fire.
Keep in mind this is a totally valid AMP interaction. The reason these
things have unique identifiers is so responses can arrive out of order.
Earlier you mentioned you saw tcpdump reporting that the response data
corresponding to the unfired Deferreds was arriving. Can you double
check that? From this `strace` output I would guess that it isn't. The
alternative explanation is a terrible, data-losing bug in the kernel's
TCP stack...
I see that twisted.internet.tcp.Connection.doRead() does check for
EWOULDBLOCK (=EAGAIN), and returns None. Shouldn't it try to read
again?
It will try again - later, when select or epoll or whatever tells it
that there's a better chance of some data coming out.
Jean-Paul
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python