The need for a special SMB receive system call

Andrew Bartlett abartlet at samba.org
Tue Sep 24 22:31:00 GMT 2002


Richard Sharpe wrote:
> 
> Hi,
> 
> In the course of hacking Samba to use the recv variant of sendfile I have
> had to modify the low level routines that read in an SMB off of a socket.
> 
> Currently, Samba makes two system calls to reveive an SMB, one to receive
> the length and the other to receive the rest of the SMB[1].
> 
> Because I wanted to leave write data on the socket for Write&X calls, and
> have this data transferred directly to the open file in the case where it
> can be safely done (Ie, we have an oplock on the file etc), I had to split
> that into a minumum of three reads: One to read the length, another to
> read to the end of the fixed header of the SMB so we can check the command
> type, and that last one to read out the rest of the data if it is not a
> Write&X request.

I was wondering about a much less elegent solution:

Why can't we do a non-blocking read on the socket, into a (large)
buffer?

We would then process the commands one-by one, until we reached one that
had a length beyond the end of the buffer.  Then we memmove it to the
start, read to it's end, process and start the game again.

What am I missing here... (I'm sure there must be somthing).

Andrew Bartlett

-- 
Andrew Bartlett                                 abartlet at pcug.org.au
Manager, Authentication Subsystems, Samba Team  abartlet at samba.org
Student Network Administrator, Hawker College   abartlet at hawkerc.net
http://samba.org     http://build.samba.org     http://hawkerc.net



More information about the samba-technical mailing list