public void SockOpt ()
{
WithSockets (UnixAddressFamily.AF_UNIX, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => {
+ int value;
+ if (Syscall.getsockopt (so1, UnixSocketProtocol.SOL_SOCKET, UnixSocketOptionName.SO_REUSEADDR, out value) < 0)
+ UnixMarshal.ThrowExceptionForLastError ();
+ Assert.AreEqual (0, value);
+
// Set SO_REUSEADDR to 1
if (Syscall.setsockopt (so1, UnixSocketProtocol.SOL_SOCKET, UnixSocketOptionName.SO_REUSEADDR, 1) < 0)
UnixMarshal.ThrowExceptionForLastError ();
// Get and check SO_REUSEADDR
- int value;
if (Syscall.getsockopt (so1, UnixSocketProtocol.SOL_SOCKET, UnixSocketOptionName.SO_REUSEADDR, out value) < 0)
UnixMarshal.ThrowExceptionForLastError ();
- Assert.AreEqual (value, 1);
+ Assert.AreNotEqual (0, value);
// Set SO_REUSEADDR to 0
if (Syscall.setsockopt (so1, UnixSocketProtocol.SOL_SOCKET, UnixSocketOptionName.SO_REUSEADDR, new byte[10], 4) < 0)
Linger value;
if (Syscall.getsockopt (so1, UnixSocketProtocol.SOL_SOCKET, UnixSocketOptionName.SO_LINGER, out value) < 0)
UnixMarshal.ThrowExceptionForLastError ();
- Assert.AreEqual (linger, value);
+ if (value.l_onoff == 0)
+ Assert.Fail ("Linger not enabled");
+ Assert.AreEqual (linger.l_linger, value.l_linger);
});
}