According to the comment in the net/core/sock.c code (in 2.6.20), I should be able to pass a zero optlen to the setsockopt method for SO_BINDTODEVICE:
case SO_BINDTODEVICE: { char devname[IFNAMSIZ]; /* Sorry... */ if (!capable(CAP_NET_RAW)) { ret = -EPERM; break; } /* Bind this socket to a particular device like "eth0", * as specified in the passed interface name. If the * name is "" or the option length is zero the socket * is not bound. */ However, earlier in that method it returns -EINVAL if optlen is < sizeof(int). The man page has comments similar to that in the code above. Also, even when I get the un-bind call working with code similar to: int z = 0; setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, &z, sizeof(z)); The app I'm working on (Xorp) does not appear to work. Perhaps because the kernel does not clean up the cached route when you un-bind as it does in the (re)bind logic? /* Remove any cached route for this socket. */ sk_dst_reset(sk); Thanks, Ben -- Ben Greear <[EMAIL PROTECTED]> Candela Technologies Inc http://www.candelatech.com - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html