]>
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();
25 cerr
<<"Syntax: dumresp LOCAL-ADDRESS LOCAL-PORT NUMBER-OF-PROCESSES"<<endl
;
28 int main(int argc
, char** argv
)
31 for(int i
= 1; i
< argc
; i
++) {
32 if((string
) argv
[i
] == "--help"){
37 if((string
) argv
[i
] == "--version"){
38 cerr
<<"dumresp "<<VERSION
<<endl
;
48 auto ptr
= mmap(NULL
, sizeof(std::atomic
<uint64_t>), PROT_READ
| PROT_WRITE
,
49 MAP_SHARED
| MAP_ANONYMOUS
, -1, 0);
51 g_counter
= new(ptr
) std::atomic
<uint64_t>();
54 for(; i
< atoi(argv
[3]); ++i
) {
59 std::thread
t(printStatus
);
63 ComboAddress
local(argv
[1], atoi(argv
[2]));
64 Socket
s(local
.sin4
.sin_family
, SOCK_DGRAM
);
67 if(setsockopt(s
.getHandle(), SOL_SOCKET
, SO_REUSEPORT
, &one
, sizeof(one
)) < 0)
68 unixDie("setsockopt for REUSEPORT");
72 cout
<<"Bound to "<<local
.toStringWithPort()<<endl
;
74 struct dnsheader
* dh
= (struct dnsheader
*)buffer
;
76 ComboAddress rem
=local
;
77 socklen_t socklen
= rem
.getSocklen();
79 len
=recvfrom(s
.getHandle(), buffer
, sizeof(buffer
), 0, (struct sockaddr
*)&rem
, &socklen
);
88 if(sendto(s
.getHandle(), buffer
, len
, 0, (struct sockaddr
*)&rem
, socklen
) < 0)
93 catch(std::exception
& e
)
95 cerr
<<"Fatal error: "<<e
.what()<<endl
;