<div dir="ltr">I have attached a testcase so that you can explore the same phenomena. Please bear in mind that I am both rusty and relatively inexperienced with C debugging strategies, this reached beyond my gdb depth for example and appears to crash within the ping_send function anyway. ;)<div><br></div><div>I have tested this on two computers. On either, testing 1021 rounds works fine:</div><div><br></div><div><div><div># ./testcase 1021</div><div>Testing 1021 simultaneous hosts.</div><div>Testing send...[</div><div>]... send test did not crash.</div><div>Done!</div></div></div><div><br></div><div><br></div><div>On 1022 or above, the first computer I tested (Debian Linux) would terminate like this:</div><div><br></div><div>>>>>>>>>>>>>>>></div><div></div><div># ./testcase 1022<br></div><div><div>Testing 1022 simultaneous hosts.</div><div>Testing send...[</div><div>*** buffer overflow detected ***: ./testcase terminated</div><div>======= Backtrace: =========</div><div>/lib/x86_64-linux-gnu/libc.so.6(+0x731af)[0x7f0c80eae1af]</div><div>/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7f0c80f33aa7]</div><div>/lib/x86_64-linux-gnu/libc.so.6(+0xf6cc0)[0x7f0c80f31cc0]</div><div>/lib/x86_64-linux-gnu/libc.so.6(+0xf8a17)[0x7f0c80f33a17]</div><div>/usr/lib/x86_64-linux-gnu/liboping.so.0(+0x1a4d)[0x7f0c811e7a4d]</div><div>./testcase[0x400b66]</div><div>/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f0c80e5cb45]</div><div>./testcase[0x4008c9]</div><div>======= Memory map: ========</div><div>00400000-00401000 r-xp 00000000 ca:01 2506811                            /root/dev/pingcore_v7/testcase</div><div>00601000-00602000 rw-p 00001000 ca:01 2506811                            /root/dev/pingcore_v7/testcase</div><div>016be000-01742000 rw-p 00000000 00:00 0                                  [heap]</div><div>7f0c80c25000-7f0c80c3b000 r-xp 00000000 ca:01 450563                     /lib/x86_64-linux-gnu/libgcc_s.so.1</div><div>7f0c80c3b000-7f0c80e3a000 ---p 00016000 ca:01 450563                     /lib/x86_64-linux-gnu/libgcc_s.so.1</div><div>7f0c80e3a000-7f0c80e3b000 rw-p 00015000 ca:01 450563                     /lib/x86_64-linux-gnu/libgcc_s.so.1</div><div>7f0c80e3b000-7f0c80fdc000 r-xp 00000000 ca:01 450699                     /lib/x86_64-linux-gnu/<a href="http://libc-2.19.so">libc-2.19.so</a></div><div>7f0c80fdc000-7f0c811dc000 ---p 001a1000 ca:01 450699                     /lib/x86_64-linux-gnu/<a href="http://libc-2.19.so">libc-2.19.so</a></div><div>7f0c811dc000-7f0c811e0000 r--p 001a1000 ca:01 450699                     /lib/x86_64-linux-gnu/<a href="http://libc-2.19.so">libc-2.19.so</a></div><div>7f0c811e0000-7f0c811e2000 rw-p 001a5000 ca:01 450699                     /lib/x86_64-linux-gnu/<a href="http://libc-2.19.so">libc-2.19.so</a></div><div>7f0c811e2000-7f0c811e6000 rw-p 00000000 00:00 0</div><div>7f0c811e6000-7f0c811ea000 r-xp 00000000 ca:01 3424331                    /usr/lib/x86_64-linux-gnu/liboping.so.0.2.10</div><div>7f0c811ea000-7f0c813e9000 ---p 00004000 ca:01 3424331                    /usr/lib/x86_64-linux-gnu/liboping.so.0.2.10</div><div>7f0c813e9000-7f0c813ea000 r--p 00003000 ca:01 3424331                    /usr/lib/x86_64-linux-gnu/liboping.so.0.2.10</div><div>7f0c813ea000-7f0c813eb000 rw-p 00004000 ca:01 3424331                    /usr/lib/x86_64-linux-gnu/liboping.so.0.2.10</div><div>7f0c813eb000-7f0c8140b000 r-xp 00000000 ca:01 450677                     /lib/x86_64-linux-gnu/<a href="http://ld-2.19.so">ld-2.19.so</a></div><div>7f0c815fc000-7f0c815ff000 rw-p 00000000 00:00 0</div><div>7f0c81607000-7f0c8160b000 rw-p 00000000 00:00 0</div><div>7f0c8160b000-7f0c8160c000 r--p 00020000 ca:01 450677                     /lib/x86_64-linux-gnu/<a href="http://ld-2.19.so">ld-2.19.so</a></div><div>7f0c8160c000-7f0c8160d000 rw-p 00021000 ca:01 450677                     /lib/x86_64-linux-gnu/<a href="http://ld-2.19.so">ld-2.19.so</a></div><div>7f0c8160d000-7f0c8160e000 rw-p 00000000 00:00 0</div><div>7fff40c1b000-7fff40c3c000 rw-p 00000000 00:00 0                          [stack]</div><div>7fff40d13000-7fff40d14000 r-xp 00000000 00:00 0                          [vdso]</div><div>ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]</div><div>Aborted</div></div><div><div><<<<<<<<<<<<<<<</div></div><div><br></div><div>The second computer would complain about too many open files:</div><div><br></div><div><div>$ sudo ./testcase</div><div>[sudo] password for jesse:</div><div>No apparent arguments offered.</div><div>Testing 2000 simultaneous hosts.</div><div>Received an error on iteration 1022.: -1 (Too many open files)</div><div><br></div></div><div><br></div><div>Until I upped the ulimit, and then it also just buffer overflowed. (incidentally, my first computer simply already had a larger ulimit.)</div><div><br></div><div>>>>>>>>>>>>>>>></div><div></div><div>$ ulimit -n 40960<br></div><div><div>$ ulimit -n</div><div>40960</div></div><div><div>$ sudo ./testcase 1022</div><div>Testing 1022 simultaneous hosts.</div><div>Testing send...[</div><div>*** buffer overflow detected ***: ./testcase terminated</div><div>======= Backtrace: =========</div><div>/lib/i386-linux-gnu/libc.so.6(+0x67377)[0xb7604377]</div><div>/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x68)[0xb7694548]</div><div>/lib/i386-linux-gnu/libc.so.6(+0xf5738)[0xb7692738]</div><div>/lib/i386-linux-gnu/libc.so.6(+0xf743a)[0xb769443a]</div><div>/usr/lib/i386-linux-gnu/liboping.so.0(+0x15ce)[0xb77545ce]</div><div>./testcase[0x80489c8]</div><div>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf7)[0xb75b5637]</div><div>./testcase[0x80486e1]</div><div>======= Memory map: ========</div><div>08048000-08049000 r-xp 00000000 09:7f 2491072    /home/jesse/dev/pingcore_v7/testcase</div><div>08049000-0804a000 r--p 00000000 09:7f 2491072    /home/jesse/dev/pingcore_v7/testcase</div><div>0804a000-0804b000 rw-p 00001000 09:7f 2491072    /home/jesse/dev/pingcore_v7/testcase</div><div>08c11000-08c72000 rw-p 00000000 00:00 0          [heap]</div><div>b759c000-b759d000 rw-p 00000000 00:00 0</div><div>b759d000-b774c000 r-xp 00000000 09:7f 12589310   /lib/i386-linux-gnu/<a href="http://libc-2.23.so">libc-2.23.so</a></div><div>b774c000-b774d000 ---p 001af000 09:7f 12589310   /lib/i386-linux-gnu/<a href="http://libc-2.23.so">libc-2.23.so</a></div><div>b774d000-b774f000 r--p 001af000 09:7f 12589310   /lib/i386-linux-gnu/<a href="http://libc-2.23.so">libc-2.23.so</a></div><div>b774f000-b7750000 rw-p 001b1000 09:7f 12589310   /lib/i386-linux-gnu/<a href="http://libc-2.23.so">libc-2.23.so</a></div><div>b7750000-b7753000 rw-p 00000000 00:00 0</div><div>b7753000-b7757000 r-xp 00000000 09:7f 10748919   /usr/lib/i386-linux-gnu/liboping.so.0.2.11</div><div>b7757000-b7758000 r--p 00003000 09:7f 10748919   /usr/lib/i386-linux-gnu/liboping.so.0.2.11</div><div>b7758000-b7759000 rw-p 00004000 09:7f 10748919   /usr/lib/i386-linux-gnu/liboping.so.0.2.11</div><div>b775a000-b7776000 r-xp 00000000 09:7f 12583781   /lib/i386-linux-gnu/libgcc_s.so.1</div><div>b7776000-b7777000 rw-p 0001b000 09:7f 12583781   /lib/i386-linux-gnu/libgcc_s.so.1</div><div>b7777000-b777a000 rw-p 00000000 00:00 0</div><div>b777a000-b777c000 r--p 00000000 00:00 0          [vvar]</div><div>b777c000-b777d000 r-xp 00000000 00:00 0          [vdso]</div><div>b777d000-b779f000 r-xp 00000000 09:7f 12589302   /lib/i386-linux-gnu/<a href="http://ld-2.23.so">ld-2.23.so</a></div><div>b779f000-b77a0000 rw-p 00000000 00:00 0</div><div>b77a0000-b77a1000 r--p 00022000 09:7f 12589302   /lib/i386-linux-gnu/<a href="http://ld-2.23.so">ld-2.23.so</a></div><div>b77a1000-b77a2000 rw-p 00023000 09:7f 12589302   /lib/i386-linux-gnu/<a href="http://ld-2.23.so">ld-2.23.so</a></div><div>bf8b7000-bf8d8000 rw-p 00000000 00:00 0          [stack]</div><div>Aborted (core dumped)</div></div><div><div><<<<<<<<<<<<<<<</div></div><div><br></div><div>Does this represent a limitation in the library, or an instance where my environment needs more room built out somewhere, like a larger stack or heap or something analogous to the ulimit?</div><div><br></div><div>Is this a limit that I might be able to raise if I simply try to hack the liboping source and rebuild, and/or what kind of scaleability tradeoffs will I encounter if I try? For my purposes it is not strictly out of the question to limit my broad ping swaths to batches of 1,000 or so, but on the other hand I am looking to target only about 3,000 hosts as it is, so batching things sounds relatively premature to me unless there are some important scaleability concerns I need to be keeping in mind. *shrugs*</div><div><br></div><div>Let me know your thoughts, and thanks again for building a library that all of my testing suggests is working rather awesomely in the 1,000 host range at least. :D</div><div><br></div><div>- - Jesse</div><div><br></div><div><br></div></div>