]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/gsocket.c
wxMSW update for CW, wxMac updated
[wxWidgets.git] / src / unix / gsocket.c
index 8b8b05b97386476f3d7c822ad1ee946d6378f113..d22b5bf23fe8ae42bff2c1dc4db62d65e6bc0d76 100644 (file)
 #if wxUSE_SOCKETS
 
 #include <assert.h>
-#include <sys/ioctl.h>
 #include <sys/types.h>
-#ifdef vms
+#include <netdb.h>
+#include <sys/ioctl.h>
+#ifdef __VMS__
+#define SOCK_LEN_TYP (unsigned int*)
 #include <socket.h>
+struct sockaddr_un {
+       u_char  sun_len;                /* sockaddr len including null */
+       u_char  sun_family;             /* AF_UNIX */
+       char    sun_path[108];          /* path name (gag) */
+};
 #else
 #include <sys/socket.h>
-#endif
 #include <sys/un.h>
+#define SOCK_LEN_TYP (int*)
+#endif
 #include <sys/time.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#include <netdb.h>
 #include <errno.h>
 
 #include <string.h>
@@ -218,7 +225,7 @@ GAddress *GSocket_GetLocal(GSocket *socket)
 
   size = sizeof(addr);
 
-  if (getsockname(socket->m_fd, &addr, &size) < 0) {
+  if (getsockname(socket->m_fd, &addr, SOCK_LEN_TYP &size) < 0) {
     socket->m_error = GSOCK_IOERR;
     return NULL;
   }
@@ -485,12 +492,10 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
         close(sck->m_fd);
         sck->m_fd = -1;
         /* sck->m_error is set in _GSocket_Output_Timeout */
-        fprintf(stderr, "Blocking connect timeouts\n");
         return GSOCK_TIMEDOUT;
       }
       else
       {
-        fprintf(stderr, "Blocking connect OK\n");
         return GSOCK_NOERROR;
       }
     }
@@ -505,7 +510,6 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
     {
       sck->m_error = GSOCK_WOULDBLOCK;
       sck->m_establishing = TRUE;
-      fprintf(stderr, "Nonblocking connect in progress\n");
 
       return GSOCK_WOULDBLOCK;
     }
@@ -517,11 +521,9 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
     sck->m_fd = -1;
     sck->m_error = GSOCK_IOERR;
 
-    fprintf(stderr, "Connect failed (generic err)\n");
     return GSOCK_IOERR;
   }
 
-  fprintf(stderr, "Connect OK\n");
   return GSOCK_NOERROR;
 }
 
@@ -804,7 +806,8 @@ int _GSocket_Recv_Dgram(GSocket *socket, char *buffer, int size)
   fromlen = sizeof(from);
 
   MASK_SIGNAL();
-  ret = recvfrom(socket->m_fd, buffer, size, 0, &from, &fromlen);
+  ret = recvfrom(socket->m_fd, buffer, size, 0, &from,
+                SOCK_LEN_TYP &fromlen);
   UNMASK_SIGNAL();
 
   if (ret == -1)
@@ -906,7 +909,8 @@ void _GSocket_Detected_Write(GSocket *socket)
     socket->m_establishing = FALSE;
 
     len = sizeof(error);
-    getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, (void*) &error, &len);
+    getsockopt(socket->m_fd, SOL_SOCKET, SO_ERROR, (void*) &error,
+              SOCK_LEN_TYP &len);
 
     if (error)
     {
@@ -1085,7 +1089,11 @@ GSocketError _GAddress_Init_INET(GAddress *address)
   address->m_family = GSOCK_INET;
   address->m_realfamily = PF_INET;
   ((struct sockaddr_in *)address->m_addr)->sin_family = AF_INET;
-  ((struct sockaddr_in *)address->m_addr)->sin_addr.s_addr = INADDR_ANY;
+  /*
+     INADDR_BROADCAST is identical to INADDR_NONE which is not defined
+     on all unices. INADDR_BROADCAST should be fine to indicate an error.
+   */
+  ((struct sockaddr_in *)address->m_addr)->sin_addr.s_addr = INADDR_BROADCAST;
 
   return GSOCK_NOERROR;
 }