From 41231ee41bb275727c97e66fcfa1486101da5382 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Thu, 20 Oct 2016 20:43:02 -0200 Subject: [PATCH] ipv6_only: use system default if unset. only apply the value if IPv6 && set. If unset (now 0xff), then call the getter so the property is in sync with the kernel default. --- src/lib/ecore_con/efl_net_server_tcp.c | 14 +++++++++++++- src/lib/ecore_con/efl_net_server_tcp.eo | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_con/efl_net_server_tcp.c b/src/lib/ecore_con/efl_net_server_tcp.c index 8a2cf73..56b1faa 100644 --- a/src/lib/ecore_con/efl_net_server_tcp.c +++ b/src/lib/ecore_con/efl_net_server_tcp.c @@ -34,6 +34,13 @@ typedef struct _Efl_Net_Server_Tcp_Data Eina_Bool ipv6_only; } Efl_Net_Server_Tcp_Data; +EOLIAN Efl_Object * +_efl_net_server_tcp_efl_object_constructor(Eo *o, Efl_Net_Server_Tcp_Data *pd) +{ + pd->ipv6_only = 0xff; + return efl_constructor(efl_super(o, MY_CLASS)); +} + EOLIAN static Eina_Error _efl_net_server_tcp_efl_net_server_serve(Eo *o, Efl_Net_Server_Tcp_Data *pd, const char *address) { @@ -113,7 +120,12 @@ _efl_net_server_tcp_efl_net_server_serve(Eo *o, Efl_Net_Server_Tcp_Data *pd, con /* apply pending value BEFORE bind() */ if (addr.ss_family == AF_INET6) - efl_net_server_tcp_ipv6_only_set(o, pd->ipv6_only); + { + if (pd->ipv6_only == 0xff) + efl_net_server_tcp_ipv6_only_get(o); /* fetch & sync */ + else + efl_net_server_tcp_ipv6_only_set(o, pd->ipv6_only); + } r = bind(fd, (struct sockaddr *)&addr, addrlen); if (r < 0) diff --git a/src/lib/ecore_con/efl_net_server_tcp.eo b/src/lib/ecore_con/efl_net_server_tcp.eo index 0627060..45636f2 100644 --- a/src/lib/ecore_con/efl_net_server_tcp.eo +++ b/src/lib/ecore_con/efl_net_server_tcp.eo @@ -34,6 +34,7 @@ class Efl.Net.Server.Tcp (Efl.Net.Server.Fd) { } implements { + Efl.Object.constructor; Efl.Net.Server.serve; Efl.Net.Server.Fd.client_add; Efl.Net.Server.Fd.client_reject; -- 2.7.4