]>
Commit | Line | Data |
---|---|---|
0d0bce6a | 1 | /* |
77b1029d | 2 | * Copyright (C) 1996-2020 The Squid Software Foundation and contributors |
0d0bce6a | 3 | * |
bbc27441 AJ |
4 | * Squid software is distributed under GPLv2+ license and includes |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
0d0bce6a AR |
7 | */ |
8 | ||
bbc27441 AJ |
9 | /* DEBUG: section 54 Interprocess Communication */ |
10 | ||
f7f3304a | 11 | #include "squid.h" |
a67d2b2e | 12 | #include "base/TextException.h" |
e0d28505 | 13 | #include "comm.h" |
e0d28505 | 14 | #include "comm/Connection.h" |
0d0bce6a AR |
15 | #include "ipc/SharedListen.h" |
16 | #include "ipc/StartListening.h" | |
561076e2 | 17 | #include "tools.h" |
0d0bce6a | 18 | |
1a30fdf5 | 19 | #include <cerrno> |
21d845b1 | 20 | |
e0d28505 | 21 | Ipc::StartListeningCb::StartListeningCb(): conn(NULL), errNo(0) |
0d0bce6a AR |
22 | { |
23 | } | |
24 | ||
25 | Ipc::StartListeningCb::~StartListeningCb() | |
26 | { | |
27 | } | |
28 | ||
29 | std::ostream &Ipc::StartListeningCb::startPrint(std::ostream &os) const | |
30 | { | |
e0d28505 | 31 | return os << "(" << conn << ", err=" << errNo; |
0d0bce6a AR |
32 | } |
33 | ||
e0d28505 AJ |
34 | void |
35 | Ipc::StartListening(int sock_type, int proto, const Comm::ConnectionPointer &listenConn, | |
f5e46c0a | 36 | FdNoteId fdNote, AsyncCall::Pointer &callback) |
0d0bce6a | 37 | { |
b72fb55d CT |
38 | StartListeningCb *cbd = dynamic_cast<StartListeningCb*>(callback->getDialer()); |
39 | Must(cbd); | |
40 | cbd->conn = listenConn; | |
41 | ||
67858492 | 42 | if (UsingSmp()) { // if SMP is on, share |
e0d28505 AJ |
43 | OpenListenerParams p; |
44 | p.sock_type = sock_type; | |
45 | p.proto = proto; | |
46 | p.addr = listenConn->local; | |
47 | p.flags = listenConn->flags; | |
48 | p.fdNote = fdNote; | |
0d0bce6a AR |
49 | Ipc::JoinSharedListen(p, callback); |
50 | return; // wait for the call back | |
51 | } | |
52 | ||
53 | enter_suid(); | |
8bbb16e3 AJ |
54 | comm_open_listener(sock_type, proto, cbd->conn, FdNote(fdNote)); |
55 | cbd->errNo = Comm::IsConnOpen(cbd->conn) ? 0 : errno; | |
0d0bce6a AR |
56 | leave_suid(); |
57 | ||
e0d28505 | 58 | debugs(54, 3, HERE << "opened listen " << cbd->conn); |
0d0bce6a AR |
59 | ScheduleCallHere(callback); |
60 | } | |
f53969cc | 61 |