[sane-devel] saned/sanei net bug
Henning Meier-Geinitz
henning@meier-geinitz.de
Sat, 16 Oct 2004 15:32:11 +0200
Hi,
On Fri, Oct 15, 2004 at 04:03:04PM +0200, Johannes Berg wrote:
> somehow saned/the sanei network layer seem to get buffering wrong.
I'm afraid that that's intentional. But that's only a guess.
> For example, I send the following:
>
> SANE_NET_INIT
> SANE_NET_GET_DEVICES
> SANE_NET_EXIT
>
> If I don't wait for the result from SANE_NET_GET_DEVICES before sending
> the control code for SANE_NET_EXIT, then the SANE_NET_EXIT code is
> discarded.
I think you must really read the result of any RPC before sending the
next one.
> I would assume that somewhere there's a buffering problem and the old
> buffer is simply dropped when the direction is changed or something.
That's done in sanei_w_set_direction().
Set SANE_DEBUG_SANEI_WIRE=255 and you'll even get a warning :-)
> The following works:
> (echo -n -e \\00\\00\\00\\00\\00\\00\\00\\00\\00\\00\\00\\00 ;
> sleep .1 ; echo -n -e \\00\\00\\x00\\x01 ; sleep 1 ;
> echo -en \\x00\\x00\\x00\\x0A ) | nc localhost 6566 -q 1 | hd
>
> while this doesn't:
> (echo -n -e \\00\\00\\00\\00\\00\\00\\00\\00\\00\\00\\00\\00 ;
> sleep .1 ; echo -n -e \\00\\00\\x00\\x01\\x00\\x00\\x00\\x0A
> )| nc localhost 6566 -q 1 | hd
>
> I think this is extremely counter-intuitive. TCP never guarantees
> message boundaries, so one wouldn't think that data is explicitly read
> by the application but then discarded.
I guess you are right but I don't really know how to fix that with the
current code. One option would be to set the wire to error state (and
exit?) when data is discarded.
Bye,
Henning