summaryrefslogtreecommitdiff
path: root/radsecproxy.c
diff options
context:
space:
mode:
authorvenaas <venaas>2008-08-21 12:18:01 +0000
committervenaas <venaas@e88ac4ed-0b26-0410-9574-a7f39faa03bf>2008-08-21 12:18:01 +0000
commitfbb9d82bb98b950898eaea727e3f0ca584d1f587 (patch)
treef8515ca15944765cd94c45141da37f0301a05c63 /radsecproxy.c
parent64b8ce46f34b9b7c4f9d3bca4c2d7bed87276db5 (diff)
moved bindtoaddr back to radsecproxy.c
git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@355 e88ac4ed-0b26-0410-9574-a7f39faa03bf
Diffstat (limited to 'radsecproxy.c')
-rw-r--r--radsecproxy.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/radsecproxy.c b/radsecproxy.c
index 853b594..c97e7ed 100644
--- a/radsecproxy.c
+++ b/radsecproxy.c
@@ -383,6 +383,32 @@ void freeclsrvres(struct clsrvconf *res) {
free(res);
}
+int bindtoaddr(struct addrinfo *addrinfo, int family, int reuse, int v6only) {
+ int s, on = 1;
+ struct addrinfo *res;
+
+ for (res = addrinfo; res; res = res->ai_next) {
+ if (family != AF_UNSPEC && family != res->ai_family)
+ continue;
+ s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (s < 0) {
+ debug(DBG_WARN, "bindtoaddr: socket failed");
+ continue;
+ }
+ if (reuse)
+ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+#ifdef IPV6_V6ONLY
+ if (v6only)
+ setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
+#endif
+ if (!bind(s, res->ai_addr, res->ai_addrlen))
+ return s;
+ debug(DBG_WARN, "bindtoaddr: bind failed");
+ close(s);
+ }
+ return -1;
+}
+
int connecttcp(struct addrinfo *addrinfo, struct addrinfo *src) {
int s;
struct addrinfo *res;