chiark
/
gitweb
/
~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
disobedience/disobedience.h: Declare variables as `extern'.
[disorder]
/
server
/
state.c
diff --git
a/server/state.c
b/server/state.c
index 63c7c4542fab4ee3a8bd5e77a0286d88a9501728..19e8be3e4f962cb00d07c581173f7a1e6407f7be 100644
(file)
--- a/
server/state.c
+++ b/
server/state.c
@@
-73,9
+73,9
@@
void quit(ev_source *ev) {
}
/** @brief Create a copy of an @c addrinfo structure */
}
/** @brief Create a copy of an @c addrinfo structure */
-static struct sockaddr *copy_sockaddr(const struct
addrinfo *
addr) {
- struct sockaddr *sa = xmalloc_noptr(
addr->ai_addr
len);
- memcpy(sa,
addr->ai_addr, addr->ai_addr
len);
+static struct sockaddr *copy_sockaddr(const struct
resolved *r
addr) {
+ struct sockaddr *sa = xmalloc_noptr(
raddr->
len);
+ memcpy(sa,
raddr->sa, raddr->
len);
return sa;
}
return sa;
}
@@
-114,7
+114,8
@@
static void reset_unix_socket(ev_source *ev,
/** @brief Create and destroy sockets to set current configuration */
void reset_sockets(ev_source *ev) {
/** @brief Create and destroy sockets to set current configuration */
void reset_sockets(ev_source *ev) {
- struct addrinfo *res, *r;
+ struct resolved *res;
+ size_t i, nres;
struct listener *l, **ll;
const char *private_dir = config_get_file("private");
struct listener *l, **ll;
const char *private_dir = config_get_file("private");
@@
-128,18
+129,17
@@
void reset_sockets(ev_source *ev) {
reset_unix_socket(ev, priv_socket, config_get_file("private/socket"), 1);
/* get the new listen config */
reset_unix_socket(ev, priv_socket, config_get_file("private/socket"), 1);
/* get the new listen config */
- if(config->listen.af != -1)
- res = netaddress_resolve(&config->listen, 1, IPPROTO_TCP);
- else
- res = 0;
+ res = 0; nres = 0;
+ if(config->listen.af != -1)
+ netaddress_resolve(&config->listen, 1, SOCK_STREAM, &res, &nres);
/* Close any current listeners that aren't required any more */
ll = &listeners;
while((l = *ll)) {
/* Close any current listeners that aren't required any more */
ll = &listeners;
while((l = *ll)) {
- for(
r = res; r; r = r->ai_next
)
- if(!sockaddrcmp(r
->ai_addr
, l->sa))
+ for(
i = 0; i < nres; i++
)
+ if(!sockaddrcmp(r
es[i].sa
, l->sa))
break;
break;
- if(
!r
) {
+ if(
i >= nres
) {
/* Didn't find a match, remove this one */
server_stop(ev, l->fd);
*ll = l->next;
/* Didn't find a match, remove this one */
server_stop(ev, l->fd);
*ll = l->next;
@@
-150,18
+150,18
@@
void reset_sockets(ev_source *ev) {
}
/* Open any new listeners that are required */
}
/* Open any new listeners that are required */
- for(
r = res; r; r = r->ai_next
) {
+ for(
i = 0; i < nres; i++
) {
for(l = listeners; l; l = l->next)
for(l = listeners; l; l = l->next)
- if(!sockaddrcmp(r
->ai_addr
, l->sa))
+ if(!sockaddrcmp(r
es[i].sa
, l->sa))
break;
if(!l) {
/* Didn't find a match, need a new listener */
break;
if(!l) {
/* Didn't find a match, need a new listener */
- int fd = server_start(ev, r
->ai_family, r->ai_addrlen, r->ai_addr
,
- format_sockaddr(r
->ai_addr
), 0);
+ int fd = server_start(ev, r
es[i].sa->sa_family, res[i].len, res[i].sa
,
+ format_sockaddr(r
es[i].sa
), 0);
if(fd >= 0) {
l = xmalloc(sizeof *l);
l->next = listeners;
if(fd >= 0) {
l = xmalloc(sizeof *l);
l->next = listeners;
- l->sa = copy_sockaddr(
r
);
+ l->sa = copy_sockaddr(
&res[i]
);
l->fd = fd;
listeners = l;
}
l->fd = fd;
listeners = l;
}
@@
-171,7
+171,7
@@
void reset_sockets(ev_source *ev) {
}
/* if res is still set it needs freeing */
if(res)
}
/* if res is still set it needs freeing */
if(res)
- netaddress_free
addrinfo(
res);
+ netaddress_free
_resolved(res, n
res);
}
/** @brief Reconfigure the server
}
/** @brief Reconfigure the server