in reply to flocking a socket

This code:
flock(HANDLE, 2);
Probably isn't doing what you think it is. flock() has a return value, and it's important. Try this:
flock(HANDLE, 2) || warn "flock failed: $!";
I won't even begin to nag you about fcntl constants, you've got a harsh lesson ahead of you already. :)