. Try harder to make sure the flags returned from getFlags isn't negative,
since a number of places in the code check for that and assume that it
means an error occurred. On FreeBSD, in particular, the value of
ifr_flags can be negative if multicast is enabled on the socket since
the possible flags have expanded to fill more than a short.
Instead of blindly promoting ifr_flags to an int, which will preserve
the sign, we fill the int return value with ifr_flagshigh in the high
16 bits and ifr_flags in the low 16 bits.
Reported by: Alex Hayward <email@example.com>