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.
This commit is contained in:
Gustavo Sverzut Barbieri 2016-10-20 20:43:02 -02:00
parent 681d47a6c1
commit 41231ee41b
2 changed files with 14 additions and 1 deletions

View 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)

View 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;