??????: When the keep-alive packet sent out,rfc1002 says
different things!!
Christopher R. Hertel
crh at ubiqx.mn.org
Tue Apr 1 02:59:44 GMT 2003
On Tue, Apr 01, 2003 at 09:40:06AM +0800, Aladdin_Cai at asus.com.cn wrote:
> Thank you all.
> For the case 1.there will be many echo overhead. And I have no way to
> know the server timeout when I am in client, so I can't determinate when
> to send echo packet.
Well, it shouldn't really be needed anyway since the first packet of a
READ RAW or WRITE RAW should reset the server timer anyway. I thought of
it as a way to force a timer reset, but it should not be necessary.
As for overhead, though, I was suggesting sending it just before the READ
RAW or WRITE RAW request. That would be minimal overhead.
> For case 2, I have though over it. suppose there is such a situation:
> when I WriteRaw data to server and server will send me a "writeRaw OK"
> response.And almost the same time,keep-alive is sent.Now I take the
> stuff out from socket buffer, which is a mixture of "writeRaw OK" and
> keep-alive packet.
...but they will be in sequence, not mixed. The WriteRaw OK message will
be a complete SMB message, so you will not have any trouble parsing them.
Just read the number of bytes specified in the NBT header's length field.
The READ RAW, as you point out below, is the real problem...
> And it is worse when it happens during the ReadRaw,
> as you know, the data in the ReadRaw has no protocol header, when a
> keep-alive packet is inserted into the stream, or if the raw data might
> be also something like {0x85 0 0 0},simply discarding will do the wrong
> thing. (although the possibility is very low.)
See, this is where I'm confused. The initial SMB message (READ RAW or
WRITE RAW) sent to the server should reset the timer. The timer should
have a timeout on the order of minutes. Even a READ RAW or WRITE RAW
should be completed before the timeout, so there should never be a
keepalive mixed in with the data.
I have never seen a READ RAW, though, so I don't know for sure how it
works. I know there isn't an SMB header, but is the NBT header also
bypassed? If it is, and if the READ RAW request doesn't reset the
timer, and if the timeout is too short...then you're absolutely right.
The keepalives will wind up in odd places in the data stream and mess
things up.
I'd call it a bug, but I would have to see a trace before I would believe
that Samba has this bug. Samba is written such that it should complete
one operation before starting the next, so even if we did fail to reset
the timer the keepalive message would follow the READ RAW, and not be lost
within it.
Chris -)-----
--
Samba Team -- http://www.samba.org/ -)----- Christopher R. Hertel
jCIFS Team -- http://jcifs.samba.org/ -)----- ubiqx development, uninq.
ubiqx Team -- http://www.ubiqx.org/ -)----- crh at ubiqx.mn.org
OnLineBook -- http://ubiqx.org/cifs/ -)----- crh at ubiqx.org
More information about the samba-technical
mailing list