diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-08-02 15:35:00 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-08-02 15:35:00 +0200 |
commit | aff9e3e9c991544a8ade2b576da3690dc0dbb071 (patch) | |
tree | d19b417af5cf00fd6195fa55c3e48d9a0053eeee | |
parent | aa424fea98fed25b3db5550738a01d53f534f177 (diff) | |
download | pingu-aff9e3e9c991544a8ade2b576da3690dc0dbb071.tar.bz2 pingu-aff9e3e9c991544a8ade2b576da3690dc0dbb071.tar.xz |
pingu_iface: init the sockets when init instead of when create
-rw-r--r-- | pingu_iface.c | 14 | ||||
-rw-r--r-- | pingu_iface.h | 1 |
2 files changed, 9 insertions, 6 deletions
diff --git a/pingu_iface.c b/pingu_iface.c index 6a87a24..85d2524 100644 --- a/pingu_iface.c +++ b/pingu_iface.c @@ -89,7 +89,7 @@ struct pingu_iface *pingu_iface_get_by_index(int index) return NULL; } -struct pingu_iface *pingu_iface_new(struct ev_loop *loop, const char *name) +struct pingu_iface *pingu_iface_new(const char *name) { struct pingu_iface *iface = pingu_iface_get_by_name(name); if (iface != NULL) @@ -104,10 +104,6 @@ struct pingu_iface *pingu_iface_new(struct ev_loop *loop, const char *name) if (name != NULL) strlcpy(iface->name, name, sizeof(iface->name)); - if (pingu_iface_init_socket(loop, iface) == -1) { - free(iface); - return NULL; - } list_init(&iface->ping_list); list_init(&iface->gateway_list); list_add(&iface->iface_list_entry, &iface_list); @@ -266,13 +262,19 @@ int pingu_iface_init(struct ev_loop *loop, struct list_head *host_list) list_for_each_entry(host, host_list, host_list_entry) { iface = pingu_iface_get_by_name(host->interface); if (iface == NULL) { - iface = pingu_iface_new(loop, host->interface); + iface = pingu_iface_new(host->interface); iface->route_table = autotbl++; } if (iface == NULL) return -1; host->iface = iface; } + + list_for_each_entry(iface, &iface_list, iface_list_entry) { + if (pingu_iface_init_socket(loop, iface) == -1) + return -1; + } + return 0; } diff --git a/pingu_iface.h b/pingu_iface.h index d3a4988..68d4b32 100644 --- a/pingu_iface.h +++ b/pingu_iface.h @@ -37,6 +37,7 @@ struct pingu_iface { struct pingu_iface *pingu_iface_get_by_name(const char *name); struct pingu_iface *pingu_iface_get_by_index(int index); +struct pingu_iface *pingu_iface_new(const char *name); int pingu_iface_bind_socket(struct pingu_iface *iface, int log_error); int pingu_iface_usable(struct pingu_iface *iface); int pingu_iface_init(struct ev_loop *loop, struct list_head *host_list); |