On Mon, Feb 05, 2007, Alex Rousskov wrote:
> Hi there,
> 
>       While applying the BodyPipe changes to ftp.cc and http.cc, I would like
> to move lots of common code into ServerStateData, the class that both
> FTP and HTTP "servers" already share.
> 
> One of the differences I noticed is how FTP and HTTP write request body
> pieces when receiving them from the client_side. Before doing each
> write, FTP calls commSetSelect(COMM_SELECT_WRITE) in
> ftpDataWriteCallback(). HTTP appears to simply call comm_write, without
> bothering to wait for the file descriptor to be selected for writing.
> 
> To me, it looks like http.cc code (and client_side code as well) are
> using "optimistic" writes. They rely on comm_* code to handle situations
> where the descriptor is not ready. Ftp.cc seems to be more cautious, but
> I do not know why.

Its a hold-over to how things were done in the past. Please try to take
advantage of comm_write() where appropriate as it'll make things easier
to port in the long run.

(Heck, Squid-2 suffers from the same split-brain personality when it comes
to network IO. I'm pretty sure comm_write() was there far before I got
to the networking layer.)

> Is the difference between ftp.cc and http.cc essential? Can I remove
> commSetSelect(COMM_SELECT_WRITE) logic from the FTP code and use bare
> comm_write calls instead?

Yup.

> Alex.
> P.S. FWIW, the BodyPipe work is progressing better than I expected. I
> was even able to remove a large chunk of ICAP code, and the result may
> be easier to comprehend and tweak.  The server side (http.cc and ftp.cc)
> code is the most complex one as it has to deal with up to three(!)

Nifty! Its good to see squid-3 work progressing.



Adrian

Reply via email to