+2004-09-13 Michael Poole <mdpoole@troilus.org>
+
+ * ircd/listener.c (add_listener): Consolidate duplicated code, and
+ make sure listener->server is set before calling inetport() on it.
+
2004-09-12 Michael Poole <mdpoole@troilus.org>
* include/channel.c (mode_parse_upass, mode_parse_apass): Only let
&& !ircd_aton(&vaddr, vhost_ip))
return;
- if ((listener = find_listener(port, &vaddr))) {
- /*
- * set active flag and change connect mask here, it's the only thing
- * that can change on a rehash
- */
- listener->active = 1;
- if (mask)
- ipmask_parse(mask, &listener->mask, &listener->mask_bits);
- else
- listener->mask_bits = 0;
- listener->hidden = is_hidden;
- listener->server = is_server;
- return;
- }
-
- listener = make_listener(port, &vaddr);
+ listener = find_listener(port, &vaddr);
+ if (!listener)
+ listener = make_listener(port, &vaddr);
+ listener->active = 1;
+ listener->hidden = is_hidden;
+ listener->server = is_server;
+ if (mask)
+ ipmask_parse(mask, &listener->mask, &listener->mask_bits);
+ else
+ listener->mask_bits = 0;
- if (inetport(listener)) {
- listener->active = 1;
- if (mask)
- ipmask_parse(mask, &listener->mask, &listener->mask_bits);
- else
- listener->mask_bits = 0;
- listener->hidden = is_hidden;
- listener->server = is_server;
+ if (listener->fd >= 0) {
+ /* If the listener is already open, do not try to re-open. */
+ }
+ else if (inetport(listener)) {
listener->next = ListenerPollList;
ListenerPollList = listener;
}