]>
Commit | Line | Data |
---|---|---|
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 |
12 | const char Ipc::coordinatorAddr[] = DEFAULT_STATEDIR "/coordinator.ipc"; |
13 | const char Ipc::strandAddrPfx[] = DEFAULT_STATEDIR "/kid"; | |
10cefb7b | 14 | |
10cefb7b | 15 | Ipc::Port::Port(const String& aListenAddr): |
5667a628 | 16 | UdsOp(aListenAddr) |
10cefb7b | 17 | { |
ba568924 AR |
18 | setOptions(COMM_NONBLOCKING | COMM_DOBIND); |
19 | } | |
20 | ||
21 | void Ipc::Port::start() | |
22 | { | |
23 | UdsOp::start(); | |
c3317fea | 24 | doListen(); |
10cefb7b | 25 | } |
26 | ||
c3317fea | 27 | void 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 |
37 | bool Ipc::Port::doneAll() const |
38 | { | |
39 | return false; // listen forever | |
40 | } | |
41 | ||
42 | String 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 | ||
52 | void 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 | } |