The value of $datasize is deliberately larger than SIZE. This is because the mtu on ethernet (max transmission unit) is 1496 bytes. By setting the packet size larger, you are forcing fragmentation which means you're more likely to get a correct response (since at half duplex the frags tend to collides and thus don't reach the remote host).
I'd check it against a host you've deliberately set to half duplex, just to make sure it works if you've changed that behaviour.
Glad it proved useful though.
That's interesting. I couldn't get it to work at all at the lower size. Sorry, more specifically: I get "Unknown error at pingsniff.pl at line 132" (the recv call, for each call). When I upped the SIZE it started working. (didn't capitalize for emphasis, the constant is caps.) Hmm. Some kind of problem where the incoming packet is bigger than the maximum size anticipated. "Unknown error" is frustrating; doesn't tell enough about what happened. Well, thanks yet again for your help.
In case anyone's interested, I modified the code to increase the size until those Unknown Errors go away. It works at 10268. I suspect this is something to do with recv() function itself wanting to reassemble the original 10240 bytes of data, as opposed to simply receiving a 1500-byte packet.