]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dumresp.cc
12 std::atomic
<uint64_t>* g_counter
;
16 auto prev
= g_counter
->load();
19 cout
<<g_counter
->load()-prev
<<"\t"<<g_counter
->load()<<endl
;
20 prev
=g_counter
->load();
24 int main(int argc
, char** argv
)
28 cerr
<<"Syntax: dumresp local-address local-port number-of-processes "<<endl
;
33 auto ptr
= mmap(NULL
, sizeof(std::atomic
<uint64_t>), PROT_READ
| PROT_WRITE
,
34 MAP_SHARED
| MAP_ANONYMOUS
, -1, 0);
36 g_counter
= new(ptr
) std::atomic
<uint64_t>();
39 for(; i
< atoi(argv
[3]); ++i
) {
44 std::thread
t(printStatus
);
48 ComboAddress
local(argv
[1], atoi(argv
[2]));
49 Socket
s(local
.sin4
.sin_family
, SOCK_DGRAM
);
52 if(setsockopt(s
.getHandle(), SOL_SOCKET
, SO_REUSEPORT
, &one
, sizeof(one
)) < 0)
53 unixDie("setsockopt for REUSEPORT");
57 cout
<<"Bound to "<<local
.toStringWithPort()<<endl
;
59 struct dnsheader
* dh
= (struct dnsheader
*)buffer
;
61 ComboAddress rem
=local
;
62 socklen_t socklen
= rem
.getSocklen();
64 len
=recvfrom(s
.getHandle(), buffer
, sizeof(buffer
), 0, (struct sockaddr
*)&rem
, &socklen
);
73 if(sendto(s
.getHandle(), buffer
, len
, 0, (struct sockaddr
*)&rem
, socklen
) < 0)
78 catch(std::exception
& e
)
80 cerr
<<"Fatal error: "<<e
.what()<<endl
;