int dns_stub_listener_extra_new(DNSStubListenerExtra **ret) {
DNSStubListenerExtra *l;
- l = new(DNSStubListenerExtra, 1);
+ l = new0(DNSStubListenerExtra, 1);
if (!l)
return -ENOMEM;
- *l = (DNSStubListenerExtra) {
- .udp_fd = -1,
- .tcp_fd = -1,
- };
-
*ret = TAKE_PTR(l);
return 0;
p->udp_event_source = sd_event_source_unref(p->udp_event_source);
p->tcp_event_source = sd_event_source_unref(p->tcp_event_source);
- p->udp_fd = safe_close(p->udp_fd);
- p->tcp_fd = safe_close(p->tcp_fd);
return mfree(p);
}
_cleanup_close_ int fd = -1;
int r;
- if (m->dns_stub_udp_fd >= 0)
- return m->dns_stub_udp_fd;
+ if (m->dns_stub_udp_event_source)
+ return sd_event_source_get_io_fd(m->dns_stub_udp_event_source);
fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
if (fd < 0)
if (r < 0)
return r;
+ r = sd_event_source_set_io_fd_own(m->dns_stub_udp_event_source, true);
+ if (r < 0)
+ return r;
+
(void) sd_event_source_set_description(m->dns_stub_udp_event_source, "dns-stub-udp");
- return m->dns_stub_udp_fd = TAKE_FD(fd);
+ return TAKE_FD(fd);
}
static int manager_dns_stub_udp_fd_extra(Manager *m, DNSStubListenerExtra *l) {
union sockaddr_union sa;
int r;
- if (l->udp_fd >= 0)
+ if (l->udp_event_source)
return 0;
if (l->family == AF_INET)
if (r < 0)
goto fail;
+ r = sd_event_source_set_io_fd_own(l->udp_event_source, true);
+ if (r < 0)
+ goto fail;
+
(void) sd_event_source_set_description(l->udp_event_source, "dns-stub-udp-extra");
if (DEBUG_LOGGING) {
log_debug("Listening on UDP socket %s.", strnull(pretty));
}
- l->udp_fd = TAKE_FD(fd);
-
- return 0;
+ return TAKE_FD(fd);
fail:
assert(r < 0);
_cleanup_close_ int fd = -1;
int r;
- if (m->dns_stub_tcp_fd >= 0)
- return m->dns_stub_tcp_fd;
+ if (m->dns_stub_tcp_event_source)
+ return sd_event_source_get_io_fd(m->dns_stub_tcp_event_source);
fd = socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
if (fd < 0)
if (r < 0)
return r;
+ r = sd_event_source_set_io_fd_own(m->dns_stub_tcp_event_source, true);
+ if (r < 0)
+ return r;
+
(void) sd_event_source_set_description(m->dns_stub_tcp_event_source, "dns-stub-tcp");
- return m->dns_stub_tcp_fd = TAKE_FD(fd);
+ return TAKE_FD(fd);
}
static int manager_dns_stub_tcp_fd_extra(Manager *m, DNSStubListenerExtra *l) {
union sockaddr_union sa;
int r;
- if (l->tcp_fd >= 0)
- return 0;
+ if (l->tcp_event_source)
+ return sd_event_source_get_io_fd(l->tcp_event_source);;
if (l->family == AF_INET)
sa = (union sockaddr_union) {
if (r < 0)
goto fail;
+ r = sd_event_source_set_io_fd_own(l->tcp_event_source, true);
+ if (r < 0)
+ goto fail;
+
(void) sd_event_source_set_description(l->tcp_event_source, "dns-stub-tcp-extra");
if (DEBUG_LOGGING) {
log_debug("Listening on TCP socket %s.", strnull(pretty));
}
- l->tcp_fd = TAKE_FD(fd);
-
- return 0;
+ return TAKE_FD(fd);
fail:
assert(r < 0);
m->dns_stub_udp_event_source = sd_event_source_unref(m->dns_stub_udp_event_source);
m->dns_stub_tcp_event_source = sd_event_source_unref(m->dns_stub_tcp_event_source);
-
- m->dns_stub_udp_fd = safe_close(m->dns_stub_udp_fd);
- m->dns_stub_tcp_fd = safe_close(m->dns_stub_tcp_fd);
}