ipv6_only: use system default if unset.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Thu, 20 Oct 2016 22:43:02 +0000 (20:43 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Fri, 21 Oct 2016 02:16:37 +0000 (00:16 -0200)
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
src/lib/ecore_con/efl_net_server_tcp.eo

index 8a2cf73..56b1faa 100644 (file)
@@ -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)
index 0627060..45636f2 100644 (file)
@@ -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;