barbieri pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=69e330e781663a1ac1ead69cf71350a80fe688cc

commit 69e330e781663a1ac1ead69cf71350a80fe688cc
Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi>
Date:   Tue Oct 18 20:00:52 2016 -0200

    efl_net_dialer_udp: enable SO_BROADCAST before sending to 255.255.255.255
    
    Like other toolkits, let's enable this automatically for users before
    connecting to 255.255.255.255 IPv4 (IPADDR_BROADCAST), otherwise most
    systems will just fail to connect and send packets.
---
 src/lib/ecore_con/ecore_con.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c
index cb66b27..6c788e0 100644
--- a/src/lib/ecore_con/ecore_con.c
+++ b/src/lib/ecore_con/ecore_con.c
@@ -3197,6 +3197,17 @@ _efl_net_connect_async_run(void *data, Ecore_Thread 
*thread EINA_UNUSED)
    if (eina_log_domain_level_check(_ecore_con_log_dom, EINA_LOG_LEVEL_DBG))
      efl_net_ip_port_fmt(buf, sizeof(buf), d->addr);
 
+   if ((d->type == SOCK_DGRAM) &&
+       (d->addr->sa_family == AF_INET) &&
+       (((const struct sockaddr_in *)d->addr)->sin_addr.s_addr == 
INADDR_BROADCAST))
+     {
+        int enable = 1;
+        if (setsockopt(d->sockfd, SOL_SOCKET, SO_BROADCAST, &enable, 
sizeof(enable)) == 0)
+          DBG("enabled SO_BROADCAST for socket=%d", d->sockfd);
+        else
+          WRN("could not enable SO_BROADCAST for socket=%d: %s", d->sockfd, 
strerror(errno));
+     }
+
    DBG("connecting fd=%d to %s", d->sockfd, buf);
 
    r = connect(d->sockfd, d->addr, d->addrlen);
@@ -3377,6 +3388,17 @@ _efl_net_ip_connect(const struct addrinfo *addr, int 
*sockfd)
                DBG("connect fd=%d to %s", fd, buf);
           }
 
+        if ((addr->ai_socktype == SOCK_DGRAM) &&
+            (addr->ai_family == AF_INET) &&
+            (((const struct sockaddr_in *)addr->ai_addr)->sin_addr.s_addr == 
INADDR_BROADCAST))
+          {
+             int enable = 1;
+             if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &enable, 
sizeof(enable)) == 0)
+               DBG("enabled SO_BROADCAST for socket=%d", fd);
+             else
+               WRN("could not enable SO_BROADCAST for socket=%d: %s", fd, 
strerror(errno));
+          }
+
         r = connect(fd, addr->ai_addr, addr->ai_addrlen);
         if (r == 0)
           {

-- 


Reply via email to