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