diff options
Diffstat (limited to 'crypto/heimdal/lib/roken/socket.c')
-rw-r--r-- | crypto/heimdal/lib/roken/socket.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/crypto/heimdal/lib/roken/socket.c b/crypto/heimdal/lib/roken/socket.c index d8463d5..ad124fd 100644 --- a/crypto/heimdal/lib/roken/socket.c +++ b/crypto/heimdal/lib/roken/socket.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: socket.c,v 1.5 2000/07/27 04:41:06 assar Exp $"); +RCSID("$Id: socket.c,v 1.7 2001/09/03 12:04:23 joda Exp $"); #endif #include <roken.h> @@ -222,6 +222,31 @@ socket_set_port (struct sockaddr *sa, int port) } /* + * Set the range of ports to use when binding with port = 0. + */ +void +socket_set_portrange (int sock, int restr, int af) +{ +#if defined(IP_PORTRANGE) + if (af == AF_INET) { + int on = restr ? IP_PORTRANGE_HIGH : IP_PORTRANGE_DEFAULT; + if (setsockopt (sock, IPPROTO_IP, IP_PORTRANGE, &on, + sizeof(on)) < 0) + warn ("setsockopt IP_PORTRANGE (ignored)"); + } +#endif +#if defined(IPV6_PORTRANGE) + if (af == AF_INET6) { + int on = restr ? IPV6_PORTRANGE_HIGH : + IPV6_PORTRANGE_DEFAULT; + if (setsockopt (sock, IPPROTO_IPV6, IPV6_PORTRANGE, &on, + sizeof(on)) < 0) + warn ("setsockopt IPV6_PORTRANGE (ignored)"); + } +#endif +} + +/* * Enable debug on `sock'. */ |