efl_net: play better with WIN32.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Sat, 22 Oct 2016 15:15:16 +0000 (13:15 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Sat, 22 Oct 2016 15:15:16 +0000 (13:15 -0200)
Defined INVALID_SOCKET=-1 and SOCKET_ERROR=-1 on non-Windows platforms
so we can keep the same construct 'function() == error' and it should
work on POSIX and windows.

I cannot test these on Windows, but the situation should be improved
with this commit.

src/lib/ecore_con/ecore_con.c
src/lib/ecore_con/ecore_con_private.h
src/lib/ecore_con/efl_net_dialer_http.c
src/lib/ecore_con/efl_net_server_fd.c
src/lib/ecore_con/efl_net_server_tcp.c
src/lib/ecore_con/efl_net_server_udp.c
src/lib/ecore_con/efl_net_server_udp_client.c
src/lib/ecore_con/efl_net_socket_fd.c
src/lib/ecore_con/efl_net_socket_tcp.c
src/lib/ecore_con/efl_net_socket_udp.c

index 7c057b3..ce93b0b 100644 (file)
@@ -3121,23 +3121,23 @@ _cleanup_close(void *data)
 {
    int *p_fd = data;
    int fd = *p_fd;
-   *p_fd = -1;
-   if (fd >= 0) close(fd);
+   *p_fd = INVALID_SOCKET;
+   if (fd != INVALID_SOCKET) close(fd);
 }
 
 int
 efl_net_socket4(int domain, int type, int protocol, Eina_Bool close_on_exec)
 {
-   int fd = -1;
+   int fd = INVALID_SOCKET;
 
 #ifdef SOCK_CLOEXEC
    if (close_on_exec) type |= SOCK_CLOEXEC;
 #endif
 
    fd = socket(domain, type, protocol);
-#ifndef SOCK_CLOEXEC
+#if !defined(SOCK_CLOEXEC) && defined(FD_CLOEXEC)
    EINA_THREAD_CLEANUP_PUSH(_cleanup_close, &fd);
-   if (fd > 0)
+   if (fd != INVALID_SOCKET)
      {
         if (close_on_exec)
           {
@@ -3146,7 +3146,7 @@ efl_net_socket4(int domain, int type, int protocol, Eina_Bool close_on_exec)
                   int errno_bkp = errno;
                   ERR("fcntl(%d, F_SETFD, FD_CLOEXEC): %s", fd, strerror(errno));
                   close(fd);
-                  fd = -1;
+                  fd = INVALID_SOCKET;
                   errno = errno_bkp;
                }
           }
@@ -3309,10 +3309,10 @@ _efl_net_connect_async_run(void *data, Ecore_Thread *thread EINA_UNUSED)
     * under construction socket to a child process.
     */
    d->sockfd = efl_net_socket4(d->addr->sa_family, d->type, d->protocol, EINA_TRUE);
-   if (d->sockfd < 0)
+   if (d->sockfd == INVALID_SOCKET)
      {
-        d->error = errno;
-        DBG("socket(%d, %d, %d) failed: %s", d->addr->sa_family, d->type, d->protocol, strerror(errno));
+        d->error = efl_net_socket_error_get();
+        DBG("socket(%d, %d, %d) failed: %s", d->addr->sa_family, d->type, d->protocol, eina_error_msg_get(d->error));
         return;
      }
 
@@ -3327,23 +3327,23 @@ _efl_net_connect_async_run(void *data, Ecore_Thread *thread EINA_UNUSED)
         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));
+          WRN("could not enable SO_BROADCAST for socket=%d: %s", d->sockfd, eina_error_msg_get(efl_net_socket_error_get()));
      }
 
    DBG("connecting fd=%d to %s", d->sockfd, buf);
 
    r = connect(d->sockfd, d->addr, d->addrlen);
-   if (r < 0)
+   if (r != 0)
      {
         int fd = d->sockfd;
-        d->error = errno;
-        d->sockfd = -1;
+        d->error = efl_net_socket_error_get();
+        d->sockfd = INVALID_SOCKET;
         /* close() is a cancellation point, thus unset sockfd before
          * closing, so the main thread _efl_net_connect_async_cancel()
          * won't close it again.
          */
         close(fd);
-        DBG("connect(%d, %s) failed: %s", fd, buf, strerror(errno));
+        DBG("connect(%d, %s) failed: %s", fd, buf, eina_error_msg_get(d->error));
         return;
      }
 
@@ -3363,15 +3363,15 @@ _efl_net_connect_async_end(void *data, Ecore_Thread *thread EINA_UNUSED)
 
 #ifdef FD_CLOEXEC
    /* if it wasn't a close on exec, release the socket to be passed to child */
-   if ((!d->close_on_exec) && (d->sockfd >= 0))
+   if ((!d->close_on_exec) && (d->sockfd != INVALID_SOCKET))
      {
         int flags = fcntl(d->sockfd, F_GETFD);
         if (flags < 0)
           {
              d->error = errno;
-             ERR("fcntl(%d, F_GETFD): %s", d->sockfd, strerror(errno));
+             ERR("fcntl(%d, F_GETFD): %s", d->sockfd, eina_error_msg_get(d->error));
              close(d->sockfd);
-             d->sockfd = -1;
+             d->sockfd = INVALID_SOCKET;
           }
         else
           {
@@ -3379,9 +3379,9 @@ _efl_net_connect_async_end(void *data, Ecore_Thread *thread EINA_UNUSED)
              if (fcntl(d->sockfd, F_SETFD, flags) < 0)
                {
                   d->error = errno;
-                  ERR("fcntl(%d, F_SETFD, %#x): %s", d->sockfd, flags, strerror(errno));
+                  ERR("fcntl(%d, F_SETFD, %#x): %s", d->sockfd, flags, eina_error_msg_get(d->error));
                   close(d->sockfd);
-                  d->sockfd = -1;
+                  d->sockfd = INVALID_SOCKET;
                }
           }
      }
@@ -3394,7 +3394,7 @@ static void
 _efl_net_connect_async_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
 {
    Efl_Net_Connect_Async_Data *d = data;
-   if (d->sockfd >= 0) close(d->sockfd);
+   if (d->sockfd != INVALID_SOCKET) close(d->sockfd);
    _efl_net_connect_async_data_free(d);
 }
 
@@ -3418,7 +3418,7 @@ efl_net_connect_async_new(const struct sockaddr *addr, socklen_t addrlen, int ty
    d->protocol = protocol;
    memcpy(d->addr, addr, addrlen);
 
-   d->sockfd = -1;
+   d->sockfd = INVALID_SOCKET;
    d->error = 0;
 
    return ecore_thread_run(_efl_net_connect_async_run,
@@ -3490,14 +3490,14 @@ typedef struct _Efl_Net_Ip_Connect_Async_Data
 static Eina_Error
 _efl_net_ip_connect(const struct addrinfo *addr, int *sockfd)
 {
-   int fd = -1;
+   int fd = INVALID_SOCKET;
    Eina_Error ret = 0;
 
    /* always close-on-exec since it's not a point to pass an
     * under construction socket to a child process.
     */
    fd = efl_net_socket4(addr->ai_family, addr->ai_socktype, addr->ai_protocol, EINA_TRUE);
-   if (fd < 0) ret = errno;
+   if (fd == INVALID_SOCKET) ret = efl_net_socket_error_get();
    else
      {
         char buf[INET6_ADDRSTRLEN + sizeof("[]:65536")] = "";
@@ -3514,11 +3514,15 @@ _efl_net_ip_connect(const struct addrinfo *addr, int *sockfd)
             (addr->ai_family == AF_INET) &&
             (((const struct sockaddr_in *)addr->ai_addr)->sin_addr.s_addr == INADDR_BROADCAST))
           {
+#ifdef _WIN32
+             DWORD enable = 1;
+#else
              int enable = 1;
+#endif
              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));
+               WRN("could not enable SO_BROADCAST for socket=%d: %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
           }
 
         r = connect(fd, addr->ai_addr, addr->ai_addrlen);
@@ -3529,8 +3533,8 @@ _efl_net_ip_connect(const struct addrinfo *addr, int *sockfd)
           }
         else
           {
-             ret = errno;
-             DBG("couldn't connect fd=%d to %s: %s", fd, buf, strerror(errno));
+             ret = efl_net_socket_error_get();
+             DBG("couldn't connect fd=%d to %s: %s", fd, buf, eina_error_msg_get(ret));
              close(fd);
           }
         EINA_THREAD_CLEANUP_POP(EINA_FALSE); /* we need sockfd on success */
@@ -3562,7 +3566,7 @@ _efl_net_ip_resolve_and_connect(const char *host, const char *port, int type, in
         DBG("couldn't resolve host='%s', port='%s': %s",
             host, port, gai_strerror(r));
         ret = EFL_NET_DIALER_ERROR_COULDNT_RESOLVE_HOST;
-        *sockfd = -1;
+        *sockfd = INVALID_SOCKET;
      }
    else
      {
@@ -3688,8 +3692,8 @@ _efl_net_ip_connect_async_run_socks4_try(Efl_Net_Ip_Connect_Async_Data *d, const
    s = send(fd, request, request_len, MSG_NOSIGNAL);
    if (s != (ssize_t)request_len)
      {
-        if (s < 0)
-          DBG("couldn't request connection to host=%s fd=%d socks4://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+        if (s == SOCKET_ERROR)
+          DBG("couldn't request connection to host=%s fd=%d socks4://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
         else
           DBG("couldn't send proxy request: need %zu, did %zd", request_len, s);
      }
@@ -3699,8 +3703,8 @@ _efl_net_ip_connect_async_run_socks4_try(Efl_Net_Ip_Connect_Async_Data *d, const
         s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
         if (s != sizeof(reply))
           {
-             if (s < 0)
-               DBG("couldn't recv reply of connection to host=%s fd=%d socks4://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+             if (s == SOCKET_ERROR)
+               DBG("couldn't recv reply of connection to host=%s fd=%d socks4://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
              else
                DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(reply), s);
           }
@@ -3810,7 +3814,7 @@ _efl_net_ip_connect_async_run_socks4(Efl_Net_Ip_Connect_Async_Data *d, const cha
 static void
 _efl_net_ip_connect_async_run_socks4a(Efl_Net_Ip_Connect_Async_Data *d, const char *host, const char *port, const char *proxy)
 {
-   int fd = -1;
+   int fd = INVALID_SOCKET;
    char *str;
    const char *proxy_user, *proxy_pass, *proxy_host, *proxy_port;
    struct sockaddr_storage proxy_addr;
@@ -3909,8 +3913,8 @@ _efl_net_ip_connect_async_run_socks4a(Efl_Net_Ip_Connect_Async_Data *d, const ch
                   s = send(fd, request, request_len, MSG_NOSIGNAL);
                   if (s != (ssize_t)request_len)
                     {
-                       if (s < 0)
-                         DBG("couldn't send proxy request: %s", strerror(errno));
+                       if (s == SOCKET_ERROR)
+                         DBG("couldn't send proxy request: %s", eina_error_msg_get(efl_net_socket_error_get()));
                        else
                          DBG("couldn't send proxy request: need %zu, did %zd", request_len, s);
                     }
@@ -3920,8 +3924,8 @@ _efl_net_ip_connect_async_run_socks4a(Efl_Net_Ip_Connect_Async_Data *d, const ch
                        s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
                        if (s != sizeof(reply))
                          {
-                            if (s < 0)
-                              DBG("couldn't recv proxy reply: %s", strerror(errno));
+                            if (s == SOCKET_ERROR)
+                              DBG("couldn't recv proxy reply: %s", eina_error_msg_get(efl_net_socket_error_get()));
                             else
                               DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(reply), s);
                          }
@@ -4139,8 +4143,8 @@ _efl_net_ip_connect_async_run_socks5_auth_user_pass(int fd, const char *user, co
    s = send(fd, msg, len, MSG_NOSIGNAL);
    if (s != (ssize_t)len)
      {
-        if (s < 0)
-          DBG("couldn't send user-password authentication to fd=%d %s://%s:%s: %s", fd, proxy_protocol, proxy_host, proxy_port, strerror(errno));
+        if (s == SOCKET_ERROR)
+          DBG("couldn't send user-password authentication to fd=%d %s://%s:%s: %s", fd, proxy_protocol, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
         else
           DBG("couldn't send user-password authentication: need %zu, did %zd", len, s);
      }
@@ -4151,8 +4155,8 @@ _efl_net_ip_connect_async_run_socks5_auth_user_pass(int fd, const char *user, co
         s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
         if (s != (ssize_t)sizeof(reply))
           {
-             if (s < 0)
-               DBG("couldn't recv user-password authentication reply from fd=%d %s://%s:%s: %s", fd, proxy_protocol, proxy_host, proxy_port, strerror(errno));
+             if (s == SOCKET_ERROR)
+               DBG("couldn't recv user-password authentication reply from fd=%d %s://%s:%s: %s", fd, proxy_protocol, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
              else
                DBG("couldn't recv user-password authentication reply: need %zu, did %zd", len, s);
           }
@@ -4207,8 +4211,8 @@ _efl_net_ip_connect_async_run_socks5_try(Efl_Net_Ip_Connect_Async_Data *d, const
    s = send(fd, &greeting, sizeof(greeting), MSG_NOSIGNAL);
    if (s != (ssize_t)sizeof(greeting))
      {
-        if (s < 0)
-          DBG("couldn't request connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+        if (s == SOCKET_ERROR)
+          DBG("couldn't request connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
         else
           DBG("couldn't send proxy request: need %zu, did %zd", sizeof(greeting), s);
      }
@@ -4218,8 +4222,8 @@ _efl_net_ip_connect_async_run_socks5_try(Efl_Net_Ip_Connect_Async_Data *d, const
         s = recv(fd, &greeting_reply, sizeof(greeting_reply), MSG_NOSIGNAL);
         if (s != sizeof(greeting_reply))
           {
-             if (s < 0)
-               DBG("couldn't recv greeting reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+             if (s == SOCKET_ERROR)
+               DBG("couldn't recv greeting reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
              else
                DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(greeting_reply), s);
           }
@@ -4247,8 +4251,8 @@ _efl_net_ip_connect_async_run_socks5_try(Efl_Net_Ip_Connect_Async_Data *d, const
                             s = send(fd, request, request_len, MSG_NOSIGNAL);
                             if (s != (ssize_t)request_len)
                               {
-                                 if (s < 0)
-                                   DBG("couldn't request connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+                                 if (s == SOCKET_ERROR)
+                                   DBG("couldn't request connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                  else
                                    DBG("couldn't send proxy request: need %zu, did %zd", request_len, s);
                               }
@@ -4258,8 +4262,8 @@ _efl_net_ip_connect_async_run_socks5_try(Efl_Net_Ip_Connect_Async_Data *d, const
                                  s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
                                  if (s != sizeof(reply))
                                    {
-                                      if (s < 0)
-                                        DBG("couldn't recv reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+                                      if (s == SOCKET_ERROR)
+                                        DBG("couldn't recv reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                       else
                                         DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(reply), s);
                                    }
@@ -4284,8 +4288,8 @@ _efl_net_ip_connect_async_run_socks5_try(Efl_Net_Ip_Connect_Async_Data *d, const
                                  s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
                                  if (s != sizeof(reply))
                                    {
-                                      if (s < 0)
-                                        DBG("couldn't recv reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, strerror(errno));
+                                      if (s == SOCKET_ERROR)
+                                        DBG("couldn't recv reply of connection to host=%s fd=%d socks5://%s:%s: %s", buf, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                       else
                                         DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(reply), s);
                                    }
@@ -4384,7 +4388,7 @@ _efl_net_ip_connect_async_run_socks5(Efl_Net_Ip_Connect_Async_Data *d, const cha
 static void
 _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const char *host, const char *port, const char *proxy)
 {
-   int fd = -1;
+   int fd = INVALID_SOCKET;
    char *str;
    const char *proxy_user, *proxy_pass, *proxy_host, *proxy_port;
    struct sockaddr_storage proxy_addr;
@@ -4436,8 +4440,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
    s = send(fd, &greeting, sizeof(greeting), MSG_NOSIGNAL);
    if (s != (ssize_t)sizeof(greeting))
      {
-        if (s < 0)
-          DBG("couldn't request connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+        if (s == SOCKET_ERROR)
+          DBG("couldn't request connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
         else
           DBG("couldn't send proxy request: need %zu, did %zd", sizeof(greeting), s);
      }
@@ -4447,8 +4451,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
         s = recv(fd, &greeting_reply, sizeof(greeting_reply), MSG_NOSIGNAL);
         if (s != sizeof(greeting_reply))
           {
-             if (s < 0)
-               DBG("couldn't recv greeting reply of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+             if (s == SOCKET_ERROR)
+               DBG("couldn't recv greeting reply of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
              else
                DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(greeting_reply), s);
           }
@@ -4512,8 +4516,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
                                       s = send(fd, request, request_len, MSG_NOSIGNAL);
                                       if (s != (ssize_t)request_len)
                                         {
-                                           if (s < 0)
-                                             DBG("couldn't request connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+                                           if (s == SOCKET_ERROR)
+                                             DBG("couldn't request connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                            else
                                              DBG("couldn't send proxy request: need %zu, did %zd", request_len, s);
                                         }
@@ -4524,8 +4528,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
                                            s = recv(fd, &reply, sizeof(reply), MSG_NOSIGNAL);
                                            if (s != sizeof(reply))
                                              {
-                                                if (s < 0)
-                                                  DBG("couldn't recv reply of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+                                                if (s == SOCKET_ERROR)
+                                                  DBG("couldn't recv reply of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                                 else
                                                   DBG("couldn't recv proxy reply: need %zu, did %zd", sizeof(reply), s);
                                              }
@@ -4540,8 +4544,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
                                                      s = recv(fd, &ipv4, sizeof(ipv4), MSG_NOSIGNAL);
                                                      if (s != sizeof(ipv4))
                                                        {
-                                                          if (s < 0)
-                                                            DBG("couldn't recv ipv4 of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+                                                          if (s == SOCKET_ERROR)
+                                                            DBG("couldn't recv ipv4 of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                                           else
                                                             DBG("couldn't recv proxy ipv4: need %zu, did %zd", sizeof(ipv4), s);
                                                        }
@@ -4563,8 +4567,8 @@ _efl_net_ip_connect_async_run_socks5h(Efl_Net_Ip_Connect_Async_Data *d, const ch
                                                      s = recv(fd, &ipv6, sizeof(ipv6), MSG_NOSIGNAL);
                                                      if (s != sizeof(ipv6))
                                                        {
-                                                          if (s < 0)
-                                                            DBG("couldn't recv ipv6 of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, strerror(errno));
+                                                          if (s == SOCKET_ERROR)
+                                                            DBG("couldn't recv ipv6 of connection to host=%s:%s fd=%d socks5h://%s:%s: %s", host, port, fd, proxy_host, proxy_port, eina_error_msg_get(efl_net_socket_error_get()));
                                                           else
                                                             DBG("couldn't recv proxy ipv6: need %zu, did %zd", sizeof(ipv6), s);
                                                        }
@@ -4778,7 +4782,7 @@ _efl_net_ip_connect_async_end(void *data, Ecore_Thread *thread EINA_UNUSED)
 
 #ifdef FD_CLOEXEC
    /* if it wasn't a close on exec, release the socket to be passed to child */
-   if ((!d->close_on_exec) && (d->sockfd >= 0))
+   if ((!d->close_on_exec) && (d->sockfd != INVALID_SOCKET))
      {
         int flags = fcntl(d->sockfd, F_GETFD);
         if (flags < 0)
@@ -4786,7 +4790,7 @@ _efl_net_ip_connect_async_end(void *data, Ecore_Thread *thread EINA_UNUSED)
              d->error = errno;
              ERR("fcntl(%d, F_GETFD): %s", d->sockfd, strerror(errno));
              close(d->sockfd);
-             d->sockfd = -1;
+             d->sockfd = INVALID_SOCKET;
           }
         else
           {
@@ -4796,7 +4800,7 @@ _efl_net_ip_connect_async_end(void *data, Ecore_Thread *thread EINA_UNUSED)
                   d->error = errno;
                   ERR("fcntl(%d, F_SETFD, %#x): %s", d->sockfd, flags, strerror(errno));
                   close(d->sockfd);
-                  d->sockfd = -1;
+                  d->sockfd = INVALID_SOCKET;
                }
           }
      }
@@ -4810,7 +4814,7 @@ static void
 _efl_net_ip_connect_async_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
 {
    Efl_Net_Ip_Connect_Async_Data *d = data;
-   if (d->sockfd >= 0) close(d->sockfd);
+   if (d->sockfd != INVALID_SOCKET) close(d->sockfd);
    _efl_net_ip_connect_async_data_free(d);
 }
 
@@ -4851,7 +4855,7 @@ efl_net_ip_connect_async_new(const char *address, const char *proxy, const char
    d->type = type;
    d->protocol = protocol;
 
-   d->sockfd = -1;
+   d->sockfd = INVALID_SOCKET;
    d->error = 0;
 
 
index e11621f..3a8c802 100644 (file)
@@ -385,6 +385,14 @@ void _efl_net_server_udp_client_feed(Eo *client, Eina_Rw_Slice slice);
 
 Eina_Bool efl_net_ip_port_fmt(char *buf, int buflen, const struct sockaddr *addr);
 
+/* allow windows and posix to use the same error comparison */
+#ifndef SOCKET_ERROR
+#define SOCKET_ERROR -1
+#endif
+#ifndef INVALID_SOCKET
+#define INVALID_SOCKET -1
+#endif
+
 /**
  * @brief splits an address in the format "host:port" in two
  * null-terminated strings.
index ea70371..5143319 100644 (file)
@@ -1102,7 +1102,7 @@ _efl_net_dialer_http_socket_open(void *data, curlsocktype purpose EINA_UNUSED, s
    Efl_Net_Dialer_Http_Data *pd = efl_data_scope_get(o, MY_CLASS);
 
    pd->fd = efl_net_socket4(addr->family, addr->socktype, addr->protocol, pd->close_on_exec);
-   if (pd->fd < 0)
+   if (pd->fd == INVALID_SOCKET)
      ERR("could not create curl socket family=%d, type=%d, protocol=%d",
          addr->family, addr->socktype, addr->protocol);
    else
@@ -1665,7 +1665,7 @@ _efl_net_dialer_http_efl_io_closer_close(Eo *o, Efl_Net_Dialer_Http_Data *pd)
 
    EINA_SAFETY_ON_TRUE_RETURN_VAL(efl_io_closer_closed_get(o), EBADF);
 
-   pd->fd = -1;
+   pd->fd = INVALID_SOCKET;
 
    if (pd->in_curl_callback)
      {
@@ -1731,7 +1731,7 @@ _efl_net_dialer_http_efl_io_closer_close_on_exec_set(Eo *o EINA_UNUSED, Efl_Net_
 
    pd->close_on_exec = close_on_exec;
 
-   if (pd->fd < 0) return EINA_TRUE; /* postpone until _efl_net_dialer_http_socket_open */
+   if (pd->fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until _efl_net_dialer_http_socket_open */
 
    flags = fcntl(pd->fd, F_GETFD);
    if (flags < 0)
index a6383f6..c654340 100644 (file)
@@ -43,6 +43,7 @@ efl_net_accept4(int fd, struct sockaddr *addr, socklen_t *addrlen, Eina_Bool clo
    int client = accept(fd, addr, addrlen);
    if (client < 0) return client;
 
+#ifdef FD_CLOEXEC
    if (close_on_exec)
      {
         if (fcntl(client, F_SETFD, FD_CLOEXEC) < 0)
@@ -54,6 +55,8 @@ efl_net_accept4(int fd, struct sockaddr *addr, socklen_t *addrlen, Eina_Bool clo
              return -1;
           }
      }
+#endif
+
    return client;
 #endif
 }
@@ -106,7 +109,7 @@ _efl_net_server_fd_efl_loop_fd_fd_set(Eo *o, Efl_Net_Server_Fd_Data *pd, int fd)
 {
    efl_loop_fd_set(efl_super(o, MY_CLASS), fd);
 
-   if (fd >= 0)
+   if (fd != INVALID_SOCKET)
      {
         /* apply postponed values */
         efl_net_server_fd_close_on_exec_set(o, pd->close_on_exec);
@@ -188,13 +191,16 @@ _efl_net_server_fd_efl_net_server_serving_get(Eo *o EINA_UNUSED, Efl_Net_Server_
 EOLIAN static Eina_Bool
 _efl_net_server_fd_close_on_exec_set(Eo *o, Efl_Net_Server_Fd_Data *pd, Eina_Bool close_on_exec)
 {
+#ifdef FD_CLOEXEC
    int flags, fd;
    Eina_Bool old = pd->close_on_exec;
+#endif
 
    pd->close_on_exec = close_on_exec;
 
+#ifdef FD_CLOEXEC
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    flags = fcntl(fd, F_GETFD);
    if (flags < 0)
@@ -213,6 +219,7 @@ _efl_net_server_fd_close_on_exec_set(Eo *o, Efl_Net_Server_Fd_Data *pd, Eina_Boo
         pd->close_on_exec = old;
         return EINA_FALSE;
      }
+#endif
 
    return EINA_TRUE;
 }
@@ -220,10 +227,11 @@ _efl_net_server_fd_close_on_exec_set(Eo *o, Efl_Net_Server_Fd_Data *pd, Eina_Boo
 EOLIAN static Eina_Bool
 _efl_net_server_fd_close_on_exec_get(Eo *o, Efl_Net_Server_Fd_Data *pd)
 {
+#ifdef FD_CLOEXEC
    int flags, fd;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->close_on_exec;
+   if (fd == INVALID_SOCKET) return pd->close_on_exec;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
@@ -236,6 +244,7 @@ _efl_net_server_fd_close_on_exec_get(Eo *o, Efl_Net_Server_Fd_Data *pd)
      }
 
    pd->close_on_exec = !!(flags & FD_CLOEXEC); /* sync */
+#endif
    return pd->close_on_exec;
 }
 
@@ -248,13 +257,13 @@ _efl_net_server_fd_reuse_address_set(Eo *o, Efl_Net_Server_Fd_Data *pd, Eina_Boo
    pd->reuse_address = reuse_address;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    value = reuse_address;
-   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, SOL_SOCKET, SO_REUSEADDR, %d): %s",
-            fd, value, strerror(errno));
+            fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->reuse_address = old;
         return EINA_FALSE;
      }
@@ -269,16 +278,16 @@ _efl_net_server_fd_reuse_address_get(Eo *o, Efl_Net_Server_Fd_Data *pd)
    socklen_t valuelen;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->reuse_address;
+   if (fd == INVALID_SOCKET) return pd->reuse_address;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
    valuelen = sizeof(value);
-   if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &value, &valuelen) < 0)
+   if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, SOL_SOCKET, SO_REUSEADDR): %s",
-            fd, strerror(errno));
+            fd, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
@@ -289,56 +298,55 @@ _efl_net_server_fd_reuse_address_get(Eo *o, Efl_Net_Server_Fd_Data *pd)
 EOLIAN static Eina_Bool
 _efl_net_server_fd_reuse_port_set(Eo *o, Efl_Net_Server_Fd_Data *pd, Eina_Bool reuse_port)
 {
+#ifdef SO_REUSEPORT
    int value, fd;
    Eina_Bool old = pd->reuse_port;
+#endif
 
    pd->reuse_port = reuse_port;
 
+#ifdef SO_REUSEPORT
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
-#ifdef SO_REUSEPORT
    value = reuse_port;
-   if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, SOL_SOCKET, SO_REUSEPORT, %d): %s",
-            fd, value, strerror(errno));
+            fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->reuse_port = old;
         return EINA_FALSE;
      }
-   return EINA_TRUE;
-#else
-   pd->reuse_port = EINA_FALSE;
-   return EINA_FALSE;
 #endif
+
+   return EINA_TRUE;
 }
 
 EOLIAN static Eina_Bool
 _efl_net_server_fd_reuse_port_get(Eo *o, Efl_Net_Server_Fd_Data *pd)
 {
+#ifdef SO_REUSEPORT
    int value = 0, fd;
    socklen_t valuelen;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->reuse_port;
+   if (fd == INVALID_SOCKET) return pd->reuse_port;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
-#ifdef SO_REUSEPORT
    valuelen = sizeof(value);
-   if (getsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &value, &valuelen) < 0)
+   if (getsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, SOL_SOCKET, SO_REUSEPORT): %s",
-            fd, strerror(errno));
+            fd, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
    pd->reuse_port = !!value; /* sync */
-   return pd->reuse_port;
-#else
-   return EINA_FALSE;
 #endif
+
+   return pd->reuse_port;
 }
 
 EOLIAN static void
@@ -378,8 +386,8 @@ _efl_net_server_fd_process_incoming_data(Eo *o, Efl_Net_Server_Fd_Data *pd)
                             efl_net_server_fd_close_on_exec_get(o));
    if (client < 0)
      {
-        Eina_Error err = errno;
-        ERR("accept(%d): %s", fd, strerror(errno));
+        Eina_Error err = efl_net_socket_error_get();
+        ERR("accept(%d): %s", fd, eina_error_msg_get(err));
         efl_event_callback_call(o, EFL_NET_SERVER_EVENT_ERROR, &err);
         return;
      }
index 72be31c..56d1a65 100644 (file)
@@ -65,12 +65,13 @@ _efl_net_server_tcp_resolved_bind(Eo *o, Efl_Net_Server_Tcp_Data *pd, const stru
 
    fd = efl_net_socket4(addr->ai_family, addr->ai_socktype, addr->ai_protocol,
                         efl_net_server_fd_close_on_exec_get(o));
-   if (fd < 0)
+   if (fd == INVALID_SOCKET)
      {
+        err = efl_net_socket_error_get();
         ERR("socket(%d, %d, %d): %s",
             addr->ai_family, addr->ai_socktype, addr->ai_protocol,
-            strerror(errno));
-        return errno;
+            eina_error_msg_get(err));
+        return err;
      }
 
    efl_loop_fd_set(o, fd);
@@ -85,25 +86,26 @@ _efl_net_server_tcp_resolved_bind(Eo *o, Efl_Net_Server_Tcp_Data *pd, const stru
      }
 
    r = bind(fd, addr->ai_addr, addrlen);
-   if (r < 0)
+   if (r != 0)
      {
-        err = errno;
+        err = efl_net_socket_error_get();
         efl_net_ip_port_fmt(buf, sizeof(buf), addr->ai_addr);
-        DBG("bind(%d, %s): %s", fd, buf, strerror(errno));
+        DBG("bind(%d, %s): %s", fd, buf, eina_error_msg_get(err));
         goto error;
      }
 
    r = listen(fd, 0);
-   if (r < 0)
+   if (r != 0)
      {
-        err = errno;
-        DBG("listen(%d): %s", fd, strerror(errno));
+        err = efl_net_socket_error_get();
+        DBG("listen(%d): %s", fd, eina_error_msg_get(err));
         goto error;
      }
 
    if (getsockname(fd, addr->ai_addr, &addrlen) != 0)
      {
-        ERR("getsockname(%d): %s", fd, strerror(errno));
+        err = efl_net_socket_error_get();
+        ERR("getsockname(%d): %s", fd, eina_error_msg_get(err));
         goto error;
      }
    else if (efl_net_ip_port_fmt(buf, sizeof(buf), addr->ai_addr))
@@ -233,8 +235,8 @@ _efl_net_server_tcp_efl_net_server_fd_client_reject(Eo *o, Efl_Net_Server_Tcp_Da
    char str[INET6_ADDRSTRLEN + sizeof("[]:65536")] = "";
 
    addrlen = sizeof(addr);
-   if (getpeername(client_fd, (struct sockaddr *)&addr, &addrlen) < 0)
-     ERR("getpeername(%d): %s", client_fd, strerror(errno));
+   if (getpeername(client_fd, (struct sockaddr *)&addr, &addrlen) != 0)
+     ERR("getpeername(%d): %s", client_fd, eina_error_msg_get(efl_net_socket_error_get()));
    else
      efl_net_ip_port_fmt(str, sizeof(str), (struct sockaddr *)&addr);
 
@@ -245,19 +247,25 @@ _efl_net_server_tcp_efl_net_server_fd_client_reject(Eo *o, Efl_Net_Server_Tcp_Da
 EOLIAN void
 _efl_net_server_tcp_ipv6_only_set(Eo *o, Efl_Net_Server_Tcp_Data *pd, Eina_Bool ipv6_only)
 {
+#ifdef IPV6_V6ONLY
    Eina_Bool old = pd->ipv6_only;
    int fd = efl_loop_fd_get(o);
+#ifdef _WIN32
+   DWORD value = ipv6_only;
+#else
    int value = ipv6_only;
+#endif
+#endif
 
    pd->ipv6_only = ipv6_only;
 
-   if (fd < 0) return;
+#ifdef IPV6_V6ONLY
+   if (fd == INVALID_SOCKET) return;
    if (efl_net_server_fd_family_get(o) != AF_INET6) return;
 
-#ifdef IPV6_V6ONLY
-   if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, sizeof(value)) != 0)
      {
-        ERR("could not set socket=%d IPV6_V6ONLY=%d: %s", fd, value, strerror(errno));
+        ERR("could not set socket=%d IPV6_V6ONLY=%d: %s", fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->ipv6_only = old;
      }
 #endif
@@ -268,15 +276,21 @@ _efl_net_server_tcp_ipv6_only_get(Eo *o EINA_UNUSED, Efl_Net_Server_Tcp_Data *pd
 {
 #ifdef IPV6_V6ONLY
    int fd = efl_loop_fd_get(o);
+#ifdef _WIN32
+   DWORD value = 0;
+   int valuelen;
+#else
    int value = 0;
-   socklen_t size = sizeof(value);
+   socklen_t valuelen;
+#endif
 
-   if (fd < 0) goto end;
+   if (fd == INVALID_SOCKET) goto end;
    if (efl_net_server_fd_family_get(o) != AF_INET6) goto end;
 
-   if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, &size) < 0)
+   valuelen = sizeof(value);
+   if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, &valuelen) != 0)
      {
-        WRN("getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY): %s", fd, strerror(errno));
+        WRN("getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         goto end;
      }
    pd->ipv6_only = !!value;
index 38971ee..63ec65c 100644 (file)
@@ -78,12 +78,13 @@ _efl_net_server_udp_resolved_bind(Eo *o, Efl_Net_Server_Udp_Data *pd, const stru
 
    fd = efl_net_socket4(addr->ai_family, addr->ai_socktype, addr->ai_protocol,
                         efl_net_server_fd_close_on_exec_get(o));
-   if (fd < 0)
+   if (fd == INVALID_SOCKET)
      {
+        err = efl_net_socket_error_get();
         ERR("socket(%d, %d, %d): %s",
             addr->ai_family, addr->ai_socktype, addr->ai_protocol,
-            strerror(errno));
-        return errno;
+            eina_error_msg_get(err));
+        return err;
      }
 
    efl_loop_fd_set(o, fd);
@@ -100,17 +101,18 @@ _efl_net_server_udp_resolved_bind(Eo *o, Efl_Net_Server_Udp_Data *pd, const stru
    efl_net_server_udp_dont_route_set(o, pd->dont_route);
 
    r = bind(fd, addr->ai_addr, addrlen);
-   if (r < 0)
+   if (r != 0)
      {
-        err = errno;
+        err = efl_net_socket_error_get();
         efl_net_ip_port_fmt(buf, sizeof(buf), addr->ai_addr);
-        DBG("bind(%d, %s): %s", fd, buf, strerror(errno));
+        DBG("bind(%d, %s): %s", fd, buf, eina_error_msg_get(err));
         goto error;
      }
 
    if (getsockname(fd, addr->ai_addr, &addrlen) != 0)
      {
-        ERR("getsockname(%d): %s", fd, strerror(errno));
+        err = efl_net_socket_error_get();
+        ERR("getsockname(%d): %s", fd, eina_error_msg_get(err));
         goto error;
      }
    else if (efl_net_ip_port_fmt(buf, sizeof(buf), addr->ai_addr))
@@ -317,19 +319,25 @@ _efl_net_server_udp_efl_net_server_fd_process_incoming_data(Eo *o, Efl_Net_Serve
 EOLIAN void
 _efl_net_server_udp_ipv6_only_set(Eo *o, Efl_Net_Server_Udp_Data *pd, Eina_Bool ipv6_only)
 {
+#ifdef IPV6_V6ONLY
    Eina_Bool old = pd->ipv6_only;
    int fd = efl_loop_fd_get(o);
+#ifdef _WIN32
+   DWORD value = ipv6_only;
+#else
    int value = ipv6_only;
+#endif
+#endif
 
    pd->ipv6_only = ipv6_only;
 
-   if (fd < 0) return;
+#ifdef IPV6_V6ONLY
+   if (fd == INVALID_SOCKET) return;
    if (efl_net_server_fd_family_get(o) != AF_INET6) return;
 
-#ifdef IPV6_V6ONLY
-   if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, sizeof(value)) != 0)
      {
-        ERR("could not set socket=%d IPV6_V6ONLY=%d: %s", fd, value, strerror(errno));
+        ERR("could not set socket=%d IPV6_V6ONLY=%d: %s", fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->ipv6_only = old;
      }
 #endif
@@ -340,15 +348,21 @@ _efl_net_server_udp_ipv6_only_get(Eo *o EINA_UNUSED, Efl_Net_Server_Udp_Data *pd
 {
 #ifdef IPV6_V6ONLY
    int fd = efl_loop_fd_get(o);
+#ifdef _WIN32
+   DWORD value = 0;
+   int valuelen;
+#else
    int value = 0;
-   socklen_t size = sizeof(value);
+   socklen_t valuelen;
+#endif
 
-   if (fd < 0) goto end;
+   if (fd == INVALID_SOCKET) goto end;
    if (efl_net_server_fd_family_get(o) != AF_INET6) goto end;
 
-   if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, &size) < 0)
+   valuelen = sizeof(value);
+   if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &value, &valuelen) != 0)
      {
-        WRN("getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY): %s", fd, strerror(errno));
+        WRN("getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         goto end;
      }
    pd->ipv6_only = !!value;
@@ -371,7 +385,7 @@ _efl_net_server_udp_dont_route_set(Eo *o, Efl_Net_Server_Udp_Data *pd, Eina_Bool
 
    pd->dont_route = dont_route;
 
-   if (fd < 0) return EINA_TRUE;
+   if (fd == INVALID_SOCKET) return EINA_TRUE;
 
    if (setsockopt(fd, SOL_SOCKET, SO_DONTROUTE, &value, sizeof(value)) != 0)
      {
@@ -395,7 +409,7 @@ _efl_net_server_udp_dont_route_get(Eo *o, Efl_Net_Server_Udp_Data *pd)
 #endif
    socklen_t valuelen;
 
-   if (fd < 0) return pd->dont_route;
+   if (fd == INVALID_SOCKET) return pd->dont_route;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
index 76c5724..1470d0d 100644 (file)
@@ -62,7 +62,7 @@ _efl_net_server_udp_client_cleanup(Efl_Net_Server_Udp_Client_Data *pd)
 {
    Efl_Net_Server_Udp_Client_Packet *pkt;
 
-   pd->fd = -1;
+   pd->fd = INVALID_SOCKET;
    EINA_INLIST_FREE(pd->packets, pkt)
      {
         pd->packets = eina_inlist_remove(pd->packets, EINA_INLIST_GET(pkt));
@@ -165,7 +165,7 @@ _efl_net_server_udp_client_efl_io_writer_write(Eo *o EINA_UNUSED, Efl_Net_Server
    ssize_t r;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(ro_slice, EINVAL);
-   if (pd->fd < 0) goto error;
+   if (pd->fd == INVALID_SOCKET) goto error;
 
    do
      {
@@ -209,7 +209,7 @@ _efl_net_server_udp_client_efl_io_reader_can_read_get(Eo *o EINA_UNUSED, Efl_Net
 EOLIAN static void
 _efl_net_server_udp_client_efl_io_reader_can_read_set(Eo *o, Efl_Net_Server_Udp_Client_Data *pd, Eina_Bool can_read)
 {
-   EINA_SAFETY_ON_TRUE_RETURN(pd->fd < 0);
+   EINA_SAFETY_ON_TRUE_RETURN(pd->fd == INVALID_SOCKET);
    if (pd->can_read == can_read) return;
    pd->can_read = can_read;
    efl_event_callback_call(o, EFL_IO_READER_EVENT_CAN_READ_CHANGED, NULL);
@@ -224,7 +224,7 @@ _efl_net_server_udp_client_efl_io_reader_eos_get(Eo *o EINA_UNUSED, Efl_Net_Serv
 EOLIAN static void
 _efl_net_server_udp_client_efl_io_reader_eos_set(Eo *o, Efl_Net_Server_Udp_Client_Data *pd, Eina_Bool is_eos)
 {
-   EINA_SAFETY_ON_TRUE_RETURN(pd->fd < 0);
+   EINA_SAFETY_ON_TRUE_RETURN(pd->fd == INVALID_SOCKET);
    if (pd->eos == is_eos) return;
    pd->eos = is_eos;
    if (is_eos)
@@ -240,7 +240,7 @@ _efl_net_server_udp_client_efl_io_writer_can_write_get(Eo *o EINA_UNUSED, Efl_Ne
 EOLIAN static void
 _efl_net_server_udp_client_efl_io_writer_can_write_set(Eo *o, Efl_Net_Server_Udp_Client_Data *pd, Eina_Bool can_write)
 {
-   EINA_SAFETY_ON_TRUE_RETURN(pd->fd < 0);
+   EINA_SAFETY_ON_TRUE_RETURN(pd->fd == INVALID_SOCKET);
    if (pd->can_write == can_write) return;
    pd->can_write = can_write;
    efl_event_callback_call(o, EFL_IO_WRITER_EVENT_CAN_WRITE_CHANGED, NULL);
@@ -249,7 +249,7 @@ _efl_net_server_udp_client_efl_io_writer_can_write_set(Eo *o, Efl_Net_Server_Udp
 EOLIAN static Eina_Bool
 _efl_net_server_udp_client_efl_io_closer_closed_get(Eo *o EINA_UNUSED, Efl_Net_Server_Udp_Client_Data *pd)
 {
-   return pd->fd < 0;
+   return pd->fd == INVALID_SOCKET;
 }
 
 EOLIAN static void
index 7abb265..f237ebb 100644 (file)
@@ -124,11 +124,11 @@ _efl_net_socket_fd_unset(Eo *o)
 EOLIAN static void
 _efl_net_socket_fd_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, int fd)
 {
-   if ((pd->family == AF_UNSPEC) && (fd >= 0))
+   if ((pd->family == AF_UNSPEC) && (fd != INVALID_SOCKET))
      {
         struct sockaddr_storage addr;
         socklen_t addrlen = sizeof(addr);
-        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) < 0)
+        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) != 0)
           ERR("getsockname(%d): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         else
           efl_net_socket_fd_family_set(o, addr.ss_family);
@@ -136,7 +136,7 @@ _efl_net_socket_fd_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, int fd)
 
    efl_loop_fd_set(efl_super(o, MY_CLASS), fd);
 
-   if (fd >= 0) _efl_net_socket_fd_set(o, pd, fd);
+   if (fd != INVALID_SOCKET) _efl_net_socket_fd_set(o, pd, fd);
    else _efl_net_socket_fd_unset(o);
 }
 
@@ -172,11 +172,11 @@ _efl_net_socket_fd_efl_io_reader_read(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNU
    ssize_t r;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(rw_slice, EINVAL);
-   if (fd < 0) goto error;
+   if (fd == INVALID_SOCKET) goto error;
    do
      {
         r = recv(fd, rw_slice->mem, rw_slice->len, 0);
-        if (r < 0)
+        if (r == SOCKET_ERROR)
           {
              Eina_Error err = efl_net_socket_error_get();
 
@@ -189,7 +189,7 @@ _efl_net_socket_fd_efl_io_reader_read(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNU
              return err;
           }
      }
-   while (r < 0);
+   while (r == SOCKET_ERROR);
 
    rw_slice->len = r;
    efl_io_reader_can_read_set(o, EINA_FALSE); /* wait Efl.Loop.Fd "read" */
@@ -211,12 +211,12 @@ _efl_net_socket_fd_efl_io_writer_write(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UN
    ssize_t r;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(ro_slice, EINVAL);
-   if (fd < 0) goto error;
+   if (fd == INVALID_SOCKET) goto error;
 
    do
      {
         r = send(fd, ro_slice->mem, ro_slice->len, 0);
-        if (r < 0)
+        if (r == SOCKET_ERROR)
           {
              Eina_Error err = efl_net_socket_error_get();
 
@@ -229,7 +229,7 @@ _efl_net_socket_fd_efl_io_writer_write(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UN
              return err;
           }
      }
-   while (r < 0);
+   while (r == SOCKET_ERROR);
 
    if (remaining)
      {
index aa70f8b..2e9eb8a 100644 (file)
@@ -47,7 +47,7 @@ _efl_net_socket_tcp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd EINA_U
 {
    efl_loop_fd_set(efl_super(o, MY_CLASS), fd);
 
-   if (fd >= 0)
+   if (fd != INVALID_SOCKET)
      {
         struct sockaddr_storage addr;
         socklen_t addrlen;
@@ -62,8 +62,8 @@ _efl_net_socket_tcp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd EINA_U
         if (family == AF_UNSPEC) return;
 
         addrlen = sizeof(addr);
-        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) < 0)
-          ERR("getsockname(%d): %s", fd, strerror(errno));
+        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) != 0)
+          ERR("getsockname(%d): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         else
           {
              char str[INET6_ADDRSTRLEN + sizeof("[]:65536")];
@@ -72,8 +72,8 @@ _efl_net_socket_tcp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd EINA_U
           }
 
         addrlen = sizeof(addr);
-        if (getpeername(fd, (struct sockaddr *)&addr, &addrlen) < 0)
-          ERR("getpeername(%d): %s", fd, strerror(errno));
+        if (getpeername(fd, (struct sockaddr *)&addr, &addrlen) != 0)
+          ERR("getpeername(%d): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         else
           {
              char str[INET6_ADDRSTRLEN + sizeof("[]:65536")];
@@ -86,19 +86,24 @@ _efl_net_socket_tcp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd EINA_U
 EOLIAN static Eina_Bool
 _efl_net_socket_tcp_keep_alive_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd, Eina_Bool keep_alive)
 {
-   int value, fd;
+   int fd;
    Eina_Bool old = pd->keep_alive;
+#ifdef _WIN32
+   DWORD value;
+#else
+   int value;
+#endif
 
    pd->keep_alive = keep_alive;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    value = keep_alive;
-   if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, SOL_SOCKET, SO_KEEPALIVE, %d): %s",
-            fd, value, strerror(errno));
+            fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->keep_alive = old;
         return EINA_FALSE;
      }
@@ -109,20 +114,26 @@ _efl_net_socket_tcp_keep_alive_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd, Eina_Bool
 EOLIAN static Eina_Bool
 _efl_net_socket_tcp_keep_alive_get(Eo *o, Efl_Net_Socket_Tcp_Data *pd)
 {
-   int value = 0, fd;
+   int fd;
+#ifdef _WIN32
+   DWORD value = 0;
+   int valuelen;
+#else
+   int value = 0;
    socklen_t valuelen;
+#endif
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->keep_alive;
+   if (fd == INVALID_SOCKET) return pd->keep_alive;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
    valuelen = sizeof(value);
-   if (getsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &value, &valuelen) < 0)
+   if (getsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, SOL_SOCKET, SO_KEEPALIVE): %s",
-            fd, strerror(errno));
+            fd, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
@@ -133,19 +144,24 @@ _efl_net_socket_tcp_keep_alive_get(Eo *o, Efl_Net_Socket_Tcp_Data *pd)
 EOLIAN static Eina_Bool
 _efl_net_socket_tcp_no_delay_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd, Eina_Bool no_delay)
 {
-   int value, fd;
+   int fd;
    Eina_Bool old = pd->no_delay;
+#ifdef _WIN32
+   BOOL value;
+#else
+   int value;
+#endif
 
    pd->no_delay = no_delay;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    value = no_delay;
-   if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, IPPROTO_TCP, TCP_NODELAY, %d): %s",
-            fd, value, strerror(errno));
+            fd, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->no_delay = old;
         return EINA_FALSE;
      }
@@ -156,20 +172,26 @@ _efl_net_socket_tcp_no_delay_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd, Eina_Bool n
 EOLIAN static Eina_Bool
 _efl_net_socket_tcp_no_delay_get(Eo *o, Efl_Net_Socket_Tcp_Data *pd)
 {
-   int value = 0, fd;
+   int fd;
+#ifdef _WIN32
+   BOOL value;
+   int valuelen;
+#else
+   int value;
    socklen_t valuelen;
+#endif
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->no_delay;
+   if (fd == INVALID_SOCKET) return pd->no_delay;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
    valuelen = sizeof(value);
-   if (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &value, &valuelen) < 0)
+   if (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, IPPROTO_TCP, TCP_NODELAY): %s",
-            fd, strerror(errno));
+            fd, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
@@ -206,13 +228,13 @@ _efl_net_socket_tcp_cork_set(Eo *o, Efl_Net_Socket_Tcp_Data *pd, Eina_Bool cork)
    pd->cork = cork;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    value = cork;
-   if (setsockopt(fd, IPPROTO_TCP, option, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, IPPROTO_TCP, option, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, IPPROTO_TCP, 0x%x, %d): %s",
-            fd, option, value, strerror(errno));
+            fd, option, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->cork = old;
         return EINA_FALSE;
      }
@@ -230,21 +252,21 @@ _efl_net_socket_tcp_cork_get(Eo *o, Efl_Net_Socket_Tcp_Data *pd)
    option = _cork_option_get();
    if (EINA_UNLIKELY(option < 0))
      {
-        ERR("Could not find a TCP_CORK equivalent on your system");
+        WRN("Could not find a TCP_CORK equivalent on your system");
         return EINA_FALSE;
      }
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->cork;
+   if (fd == INVALID_SOCKET) return pd->cork;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
    valuelen = sizeof(value);
-   if (getsockopt(fd, IPPROTO_TCP, option, &value, &valuelen) < 0)
+   if (getsockopt(fd, IPPROTO_TCP, option, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, IPPROTO_TCP, 0x%x): %s",
-            fd, option, strerror(errno));
+            fd, option, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
index 5b584c2..98bfb60 100644 (file)
@@ -46,7 +46,7 @@ _efl_net_socket_udp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Udp_Data *pd EINA_U
 {
    efl_loop_fd_set(efl_super(o, MY_CLASS), fd);
 
-   if (fd >= 0)
+   if (fd != INVALID_SOCKET)
      {
         struct sockaddr_storage addr;
         socklen_t addrlen;
@@ -60,8 +60,8 @@ _efl_net_socket_udp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Udp_Data *pd EINA_U
         if (family == AF_UNSPEC) return;
 
         addrlen = sizeof(addr);
-        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) < 0)
-          ERR("getsockname(%d): %s", fd, strerror(errno));
+        if (getsockname(fd, (struct sockaddr *)&addr, &addrlen) != 0)
+          ERR("getsockname(%d): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         else
           {
              char str[INET6_ADDRSTRLEN + sizeof("[]:65536")];
@@ -70,8 +70,8 @@ _efl_net_socket_udp_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Udp_Data *pd EINA_U
           }
 
         addrlen = sizeof(addr);
-        if (getpeername(fd, (struct sockaddr *)&addr, &addrlen) < 0)
-          ERR("getpeername(%d): %s", fd, strerror(errno));
+        if (getpeername(fd, (struct sockaddr *)&addr, &addrlen) != 0)
+          ERR("getpeername(%d): %s", fd, eina_error_msg_get(efl_net_socket_error_get()));
         else
           {
              char str[INET6_ADDRSTRLEN + sizeof("[]:65536")];
@@ -108,13 +108,13 @@ _efl_net_socket_udp_cork_set(Eo *o, Efl_Net_Socket_Udp_Data *pd, Eina_Bool cork)
    pd->cork = cork;
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return EINA_TRUE; /* postpone until fd_set() */
+   if (fd == INVALID_SOCKET) return EINA_TRUE; /* postpone until fd_set() */
 
    value = cork;
-   if (setsockopt(fd, IPPROTO_UDP, option, &value, sizeof(value)) < 0)
+   if (setsockopt(fd, IPPROTO_UDP, option, &value, sizeof(value)) != 0)
      {
         ERR("setsockopt(%d, IPPROTO_UDP, 0x%x, %d): %s",
-            fd, option, value, strerror(errno));
+            fd, option, value, eina_error_msg_get(efl_net_socket_error_get()));
         pd->cork = old;
         return EINA_FALSE;
      }
@@ -132,21 +132,21 @@ _efl_net_socket_udp_cork_get(Eo *o, Efl_Net_Socket_Udp_Data *pd)
    option = _cork_option_get();
    if (EINA_UNLIKELY(option < 0))
      {
-        ERR("Could not find a UDP_CORK equivalent on your system");
+        WRN("Could not find a UDP_CORK equivalent on your system");
         return EINA_FALSE;
      }
 
    fd = efl_loop_fd_get(o);
-   if (fd < 0) return pd->cork;
+   if (fd == INVALID_SOCKET) return pd->cork;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.
     */
    valuelen = sizeof(value);
-   if (getsockopt(fd, IPPROTO_UDP, option, &value, &valuelen) < 0)
+   if (getsockopt(fd, IPPROTO_UDP, option, &value, &valuelen) != 0)
      {
         ERR("getsockopt(%d, IPPROTO_UDP, 0x%x): %s",
-            fd, option, strerror(errno));
+            fd, option, eina_error_msg_get(efl_net_socket_error_get()));
         return EINA_FALSE;
      }
 
@@ -167,7 +167,7 @@ _efl_net_socket_udp_dont_route_set(Eo *o, Efl_Net_Socket_Udp_Data *pd, Eina_Bool
 
    pd->dont_route = dont_route;
 
-   if (fd < 0) return EINA_TRUE;
+   if (fd == INVALID_SOCKET) return EINA_TRUE;
 
    if (setsockopt(fd, SOL_SOCKET, SO_DONTROUTE, &value, sizeof(value)) != 0)
      {
@@ -191,7 +191,7 @@ _efl_net_socket_udp_dont_route_get(Eo *o, Efl_Net_Socket_Udp_Data *pd)
 #endif
    socklen_t valuelen;
 
-   if (fd < 0) return pd->dont_route;
+   if (fd == INVALID_SOCKET) return pd->dont_route;
 
    /* if there is a fd, always query it directly as it may be modified
     * elsewhere by nasty users.