Topic branch: rosuav/sockopt

Per Lance's suggestion, I've made a generic setsockopt() function. It
works only with integers, so it's not suitable for SO_LINGER, which
therefore should stay the way it is (linger() takes a magic parameter
of -1), but it works for any of the simple boolean options.

As to shortcut functions, though, there are a few ways they can be done.

1) set_keepalive() always exists, even if SO_KEEPALIVE isn't
available. If you call it when there's no SO_KEEPALIVE, it sets errno
and returns failure.
2) set_nodelay() exists only if TCP_NODELAY is available.
3) setsockopt() itself is useless without the constants, and
Stdio.TCP_NODELAY will exist only if TCP_NODELAY is available.

So in a Pike script, using setsockopt() requires either has_index()
run-time checks or #if compile-time checks for the options you want;
set_keepalive's model works easily if you know that the Pike version
you're targeting supports it; and set_nodelay's model lets you treat
older Pikes and systems without that feature the same way.

I'd rather make it as easy as possible on the Pike code. Which way
makes more sense?

ChrisA

Reply via email to