On Sat, 8 Nov 2003, Kusuma Samorthong wrote: > I want to know that is it really processing of squid according?
It is one way of describing the basic operations of Squid, but there are many different aspects depending on what you are looking at. The processing of Squid is best described as a large set of state machines, all driven forward by the central select loop monitoring filedescriptor activity or timer events. At some points in the code new state machines are being born in response to different events. httpAccept() is one such place, DNS lookups another. It is almost impossible to correcly draw one diagram showing all these and their interactions, but it is possible to describe the general flow of a single request. The following is based on the Squid-2.5 code base: * httpAccept() accepts a new client connection * clientReadRequests() reads and parses a request * clientAccessCheck() verifies the http_access rules * redirectStart() calls the redirector helper (if any) * clientCheckNoCache() verifies the no_cache rules * clientProcessRequest() starts processing the request from here it depends on if the request was a cache miss/hit/expired object. I'll focus on the miss case. * clientProcessMiss() starts retreiving of the cache miss and also starts reading of the reply (done within the clientCreateStoreEntry() call) * fwdStart() prepares for selection of forwarding path * peerSelect() selects the possible paths where to forward the request * fwdConnectStart() connects via the selected path * fwdDispatch() initiates forwarding of the request via the server connection and from here it depends on the type of path selected and protocol requested. the rest can be found relatively easily in the code, and the programmers guide also gives valuable information. Regards Henrik