Fix for Coverity
fr_socket() returns a negative number for error
Checks for case which shouldn't happen
Remove dead code
Unlock on malloc fails
Return if alloc fails
Check length of ethernet VP
If we can't update the ARP table, broadcast the reply.

Some systems don't like this, but it works for others.

The real solution for *BSD is to open a BPF socket, and create
the packets ourselves.  That's a bit harder.