]> git.ipfire.org Git - thirdparty/squid.git/blame - src/ipc/Port.cc
Add ${service_name} macro to squid.conf processing
[thirdparty/squid.git] / src / ipc / Port.cc
CommitLineData
10cefb7b 1/*
10cefb7b 2 * DEBUG: section 54 Interprocess Communication
3 *
4 */
5
f7f3304a 6#include "squid.h"
8942ceb3 7#include "comm.h"
8942ceb3 8#include "comm/Connection.h"
602d9612 9#include "CommCalls.h"
10cefb7b 10#include "ipc/Port.h"
11
6df70a31
AJ
12const char Ipc::coordinatorAddr[] = DEFAULT_STATEDIR "/coordinator.ipc";
13const char Ipc::strandAddrPfx[] = DEFAULT_STATEDIR "/kid";
10cefb7b 14
10cefb7b 15Ipc::Port::Port(const String& aListenAddr):
5667a628 16 UdsOp(aListenAddr)
10cefb7b 17{
ba568924
AR
18 setOptions(COMM_NONBLOCKING | COMM_DOBIND);
19}
20
21void Ipc::Port::start()
22{
23 UdsOp::start();
c3317fea 24 doListen();
10cefb7b 25}
26
c3317fea 27void Ipc::Port::doListen()
10cefb7b 28{
29 debugs(54, 6, HERE);
7230e9c7 30 buf.prepForReading();
4299f876
AR
31 typedef CommCbMemFunT<Port, CommIoCbParams> Dialer;
32 AsyncCall::Pointer readHandler = JobCallback(54, 6,
4cb2536f 33 Dialer, this, Port::noteRead);
ec20038e 34 comm_read(conn(), buf.raw(), buf.size(), readHandler);
10cefb7b 35}
36
ba568924
AR
37bool Ipc::Port::doneAll() const
38{
39 return false; // listen forever
40}
41
42String Ipc::Port::MakeAddr(const char* pathAddr, int id)
10cefb7b 43{
44 assert(id >= 0);
45 String addr = pathAddr;
46 addr.append('-');
47 addr.append(xitoa(id));
ba568924 48 addr.append(".ipc");
10cefb7b 49 return addr;
50}
51
52void Ipc::Port::noteRead(const CommIoCbParams& params)
53{
e0d28505 54 debugs(54, 6, HERE << params.conn << " flag " << params.flag <<
5667a628 55 " [" << this << ']');
10cefb7b 56 if (params.flag == COMM_OK) {
ba568924 57 assert(params.buf == buf.raw());
ba568924 58 receive(buf);
10cefb7b 59 }
ba568924 60 // TODO: if there was a fatal error on our socket, close the socket before
1bac0258 61 // trying to listen again and print a level-1 error message.
ba568924 62
c3317fea 63 doListen();
10cefb7b 64}