2 related problems - 1). DOS uses chained commands - when we
are replying with sendfile we neglect to send the chained header. 2). Win9x and
DOS TCP stacks blow up when getting data back from a Linux sendfile - "The
engines canna take the strain cap'n". Don't use sendfile for anything less than NT1.
Jeremy.
(This used to be commit
3cd88f48afa589a189bb728d2d2660d058203d4d)
BOOL lp_use_sendfile(int snum)
{
+ extern int Protocol;
+ /* Using sendfile blows the brains out of any DOS or Win9x TCP stack... JRA. */
+ if (Protocol < PROTOCOL_NT1) {
+ return False;
+ }
return (_lp_use_sendfile(snum) && (get_remote_arch() != RA_WIN95) && !srv_is_signing_active());
}
* reply_readbraw has already checked the length.
*/
- if ((nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && lp_use_sendfile(SNUM(conn)) ) {
+ if (chain_size ==0 && (nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && lp_use_sendfile(SNUM(conn)) ) {
DATA_BLOB header;
_smb_setlen(outbuf,nread);
* on a train in Germany :-). JRA.
*/
- if ((CVAL(inbuf,smb_vwv0) == 0xFF) && lp_use_sendfile(SNUM(conn)) &&
+ if (chain_size ==0 && (CVAL(inbuf,smb_vwv0) == 0xFF) && lp_use_sendfile(SNUM(conn)) &&
(lp_write_cache_size(SNUM(conn)) == 0) ) {
SMB_STRUCT_STAT sbuf;
DATA_BLOB header;